@cube-dev/ui-kit 0.0.0-canary-6be6cbe → 0.0.0-canary-7ec55ba

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 (542) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +3 -4
  16. package/dist/components/Root.js.map +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +2 -4
  19. package/dist/components/actions/Banner/Banner.js.map +1 -1
  20. package/dist/components/actions/Button/Button.js +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  23. package/dist/components/actions/ButtonSplit/context.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +2 -4
  25. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +3 -6
  42. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  43. package/dist/components/actions/use-context-menu.js +3 -6
  44. package/dist/components/actions/use-context-menu.js.map +1 -1
  45. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/dist/components/content/Alert/Alert.js +1 -1
  47. package/dist/components/content/Alert/use-alert.js +1 -1
  48. package/dist/components/content/Avatar/Avatar.js +1 -1
  49. package/dist/components/content/Badge/Badge.js +1 -1
  50. package/dist/components/content/Card/Card.js +1 -1
  51. package/dist/components/content/Content.js +1 -1
  52. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +6 -7
  53. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  54. package/dist/components/content/CopySnippet/CopySnippet.js +9 -9
  55. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  56. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  57. package/dist/components/content/Divider.js +1 -1
  58. package/dist/components/content/Footer.js +1 -1
  59. package/dist/components/content/Header.js +1 -1
  60. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  61. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  62. package/dist/components/content/Item/Item.js +1 -1
  63. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  64. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  65. package/dist/components/content/Layout/GridLayout.js +1 -1
  66. package/dist/components/content/Layout/Layout.js +1 -1
  67. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  68. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  69. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  70. package/dist/components/content/Layout/LayoutContent.js +1 -1
  71. package/dist/components/content/Layout/LayoutContext.js +1 -1
  72. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  73. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  74. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  75. package/dist/components/content/Layout/LayoutHeader.js +2 -4
  76. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  77. package/dist/components/content/Layout/LayoutPane.js +1 -1
  78. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  79. package/dist/components/content/Layout/LayoutPanelHeader.js +6 -9
  80. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  81. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  82. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  83. package/dist/components/content/Layout/index.js +1 -1
  84. package/dist/components/content/Layout/utils.js +1 -1
  85. package/dist/components/content/Paragraph.js +1 -1
  86. package/dist/components/content/Placeholder/Placeholder.js +2 -4
  87. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  88. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  89. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  90. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  91. package/dist/components/content/Result/Result.js +1 -1
  92. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  93. package/dist/components/content/Tag/Tag.js +2 -4
  94. package/dist/components/content/Tag/Tag.js.map +1 -1
  95. package/dist/components/content/Text.d.ts +7 -7
  96. package/dist/components/content/Text.js +1 -1
  97. package/dist/components/content/TextItem/TextItem.js +1 -1
  98. package/dist/components/content/Title.js +1 -1
  99. package/dist/components/content/Tree/Tree.js +1 -1
  100. package/dist/components/content/Tree/TreeNode.js +2 -4
  101. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  102. package/dist/components/content/Tree/styled.js +1 -1
  103. package/dist/components/content/Tree/tree-index.js +1 -1
  104. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  105. package/dist/components/content/Tree/use-load-data.js +1 -1
  106. package/dist/components/content/highlightText.js +1 -1
  107. package/dist/components/content/use-auto-tooltip.js +1 -1
  108. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  109. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  110. package/dist/components/fields/Checkbox/context.js +1 -1
  111. package/dist/components/fields/ComboBox/ComboBox.js +3 -5
  112. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  113. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  114. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  115. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  116. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  117. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  118. package/dist/components/fields/DatePicker/DatePicker.js +3 -4
  119. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  120. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  121. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  122. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  123. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  124. package/dist/components/fields/DatePicker/DateRangePicker.js +4 -5
  125. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  126. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +5 -6
  127. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  128. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  129. package/dist/components/fields/DatePicker/intl.js +11 -0
  130. package/dist/components/fields/DatePicker/intl.js.map +1 -0
  131. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  132. package/dist/components/fields/DatePicker/props.js +1 -1
  133. package/dist/components/fields/DatePicker/utils.js +1 -1
  134. package/dist/components/fields/FileInput/FileInput.js +3 -5
  135. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  136. package/dist/components/fields/FilterListBox/FilterListBox.js +6 -9
  137. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  138. package/dist/components/fields/FilterPicker/FilterPicker.js +3 -5
  139. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  140. package/dist/components/fields/Input/Input.js +1 -1
  141. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  142. package/dist/components/fields/ListBox/ListBox.js +5 -9
  143. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  144. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +2 -4
  145. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  146. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  147. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  148. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  149. package/dist/components/fields/NumberInput/StepButton.js +2 -5
  150. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  151. package/dist/components/fields/PasswordInput/PasswordInput.js +2 -4
  152. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  153. package/dist/components/fields/Picker/Picker.js +3 -5
  154. package/dist/components/fields/Picker/Picker.js.map +1 -1
  155. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  156. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  157. package/dist/components/fields/RadioGroup/context.js +1 -1
  158. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  159. package/dist/components/fields/Select/Select.js +1 -1
  160. package/dist/components/fields/Slider/Gradation.js +1 -1
  161. package/dist/components/fields/Slider/HueSlider.js +1 -1
  162. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  163. package/dist/components/fields/Slider/Slider.js +1 -1
  164. package/dist/components/fields/Slider/SliderBase.js +1 -1
  165. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  166. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  167. package/dist/components/fields/Slider/elements.js +1 -1
  168. package/dist/components/fields/Slider/index.js +1 -1
  169. package/dist/components/fields/Switch/Switch.js +1 -1
  170. package/dist/components/fields/TextArea/TextArea.js +1 -1
  171. package/dist/components/fields/TextInput/TextInput.js +1 -1
  172. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  173. package/dist/components/fields/TextInputMapper/TextInputMapper.js +5 -7
  174. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  175. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  176. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  177. package/dist/components/form/Form/Field.js +1 -1
  178. package/dist/components/form/Form/Form.js +1 -1
  179. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  180. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  181. package/dist/components/form/Form/SubmitError.js +2 -4
  182. package/dist/components/form/Form/SubmitError.js.map +1 -1
  183. package/dist/components/form/Form/index.js +1 -1
  184. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  185. package/dist/components/form/Form/use-field/use-field.js +1 -1
  186. package/dist/components/form/Form/use-form.js +1 -1
  187. package/dist/components/form/Form/validation.js +1 -1
  188. package/dist/components/form/Label.js +8 -6
  189. package/dist/components/form/Label.js.map +1 -1
  190. package/dist/components/form/wrapper.js +1 -1
  191. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  192. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  193. package/dist/components/layout/Board/Board.d.ts +24 -5
  194. package/dist/components/layout/Board/Board.js +84 -61
  195. package/dist/components/layout/Board/Board.js.map +1 -1
  196. package/dist/components/layout/Board/BoardProvider.js +1 -1
  197. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  198. package/dist/components/layout/Board/Widget.d.ts +23 -3
  199. package/dist/components/layout/Board/Widget.js +28 -2
  200. package/dist/components/layout/Board/Widget.js.map +1 -1
  201. package/dist/components/layout/Board/WidgetHost.js +22 -13
  202. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  203. package/dist/components/layout/Board/board-context.js +12 -2
  204. package/dist/components/layout/Board/board-context.js.map +1 -1
  205. package/dist/components/layout/Board/board-store.js +2 -2
  206. package/dist/components/layout/Board/board-store.js.map +1 -1
  207. package/dist/components/layout/Board/grid-core/calculate.js +2 -2
  208. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  209. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  210. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  211. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  212. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  213. package/dist/components/layout/Board/index.d.ts +1 -1
  214. package/dist/components/layout/Board/index.js +1 -1
  215. package/dist/components/layout/Board/responsive-utils.js +1 -1
  216. package/dist/components/layout/Board/use-board-layout.js +1 -1
  217. package/dist/components/layout/Board/use-board-registry.js +3 -2
  218. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  219. package/dist/components/layout/Flex.js +1 -1
  220. package/dist/components/layout/Flow.js +1 -1
  221. package/dist/components/layout/Grid.js +1 -1
  222. package/dist/components/layout/Panel.js +1 -1
  223. package/dist/components/layout/Prefix.js +1 -1
  224. package/dist/components/layout/ResizablePanel.js +1 -1
  225. package/dist/components/layout/Space.js +1 -1
  226. package/dist/components/layout/Suffix.js +1 -1
  227. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  228. package/dist/components/navigation/Tabs/TabButton.js +4 -7
  229. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  230. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  231. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  232. package/dist/components/navigation/Tabs/TabPicker.js +3 -5
  233. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  234. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  235. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  236. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  237. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  238. package/dist/components/navigation/Tabs/styled.js +1 -1
  239. package/dist/components/navigation/Tabs/types.js +1 -1
  240. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  241. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  242. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  243. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  244. package/dist/components/other/Calendar/Calendar.js +1 -1
  245. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  246. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  247. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  248. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  249. package/dist/components/overlays/AlertDialog/AlertDialog.js +6 -8
  250. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  251. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  252. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  253. package/dist/components/overlays/Dialog/Dialog.js +8 -5
  254. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  255. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  256. package/dist/components/overlays/Dialog/DialogForm.js +3 -5
  257. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  258. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  259. package/dist/components/overlays/Dialog/context.js +1 -1
  260. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  261. package/dist/components/overlays/Modal/Modal.js +1 -1
  262. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  263. package/dist/components/overlays/Modal/Overlay.js +1 -1
  264. package/dist/components/overlays/Modal/Popover.js +1 -1
  265. package/dist/components/overlays/Modal/Tray.js +1 -1
  266. package/dist/components/overlays/Modal/Underlay.js +1 -1
  267. package/dist/components/overlays/Notifications/Notification.js +1 -1
  268. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  269. package/dist/components/overlays/Notifications/NotificationCard.js +2 -4
  270. package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
  271. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  272. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  273. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  274. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  275. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +8 -17
  276. package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
  277. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  278. package/dist/components/overlays/Notifications/format-relative-time.d.ts +3 -9
  279. package/dist/components/overlays/Notifications/format-relative-time.js +12 -20
  280. package/dist/components/overlays/Notifications/format-relative-time.js.map +1 -1
  281. package/dist/components/overlays/Notifications/index.js +1 -1
  282. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  283. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  284. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  285. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  286. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  287. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  288. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  289. package/dist/components/overlays/Toast/index.js +1 -1
  290. package/dist/components/overlays/Toast/useProgressToast.js +3 -6
  291. package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
  292. package/dist/components/overlays/Toast/useToast.js +1 -1
  293. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  294. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  295. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  296. package/dist/components/overlays/Tooltip/context.js +1 -1
  297. package/dist/components/portal/Portal.js +1 -1
  298. package/dist/components/portal/PortalProvider.js +1 -1
  299. package/dist/components/portal/usePortal.js +1 -1
  300. package/dist/components/shared/DraggableCollection.js +1 -1
  301. package/dist/components/shared/InvalidIcon.js +1 -1
  302. package/dist/components/shared/ValidIcon.js +1 -1
  303. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +2 -4
  304. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  305. package/dist/components/status/Spin/Cube.js +1 -1
  306. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  307. package/dist/components/status/Spin/Spin.js +1 -1
  308. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  309. package/dist/data/item-themes.js +1 -1
  310. package/dist/data/themes.js +1 -1
  311. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  312. package/dist/icons/AdjustmentsIcon.js +1 -1
  313. package/dist/icons/AiIcon.js +1 -1
  314. package/dist/icons/AreaChartIcon.js +1 -1
  315. package/dist/icons/BackwardIcon.js +1 -1
  316. package/dist/icons/BarChartIcon.js +1 -1
  317. package/dist/icons/BellFilledIcon.js +1 -1
  318. package/dist/icons/BellIcon.js +1 -1
  319. package/dist/icons/BooleanIcon.js +1 -1
  320. package/dist/icons/CalendarEditIcon.js +1 -1
  321. package/dist/icons/CalendarIcon.js +1 -1
  322. package/dist/icons/CaretDownIcon.js +1 -1
  323. package/dist/icons/CaretUpIcon.js +1 -1
  324. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  325. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  326. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  327. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  328. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  329. package/dist/icons/ChartBarLineIcon.js +1 -1
  330. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  331. package/dist/icons/ChartBarStackedIcon.js +1 -1
  332. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  333. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  334. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  335. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  336. package/dist/icons/ChartBubbleIcon.js +1 -1
  337. package/dist/icons/ChartDonut2Icon.js +1 -1
  338. package/dist/icons/ChartFunnelIcon.js +1 -1
  339. package/dist/icons/ChartHeatmapIcon.js +1 -1
  340. package/dist/icons/ChartKPIIcon.js +1 -1
  341. package/dist/icons/ChartPie2Icon.js +1 -1
  342. package/dist/icons/ChartScatterIcon.js +1 -1
  343. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  344. package/dist/icons/CheckCircleIcon.js +1 -1
  345. package/dist/icons/CheckIcon.js +1 -1
  346. package/dist/icons/CircleFilledIcon.js +1 -1
  347. package/dist/icons/ClearIcon.js +1 -1
  348. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  349. package/dist/icons/CloseCircleIcon.js +1 -1
  350. package/dist/icons/CloseIcon.js +1 -1
  351. package/dist/icons/CodeIcon.js +1 -1
  352. package/dist/icons/ColumnTotalIcon.js +1 -1
  353. package/dist/icons/CopyIcon.js +1 -1
  354. package/dist/icons/CountIcon.js +1 -1
  355. package/dist/icons/CubeIcon.js +1 -1
  356. package/dist/icons/CubePauseIcon.js +1 -1
  357. package/dist/icons/CubePlayIcon.js +1 -1
  358. package/dist/icons/CurrencyDollarIcon.js +1 -1
  359. package/dist/icons/DangerIcon.js +1 -1
  360. package/dist/icons/DashboardIcon.js +1 -1
  361. package/dist/icons/DatabaseIcon.js +1 -1
  362. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  363. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  364. package/dist/icons/DirectionIcon.js +1 -1
  365. package/dist/icons/DonutIcon.js +1 -1
  366. package/dist/icons/DownIcon.js +1 -1
  367. package/dist/icons/EditIcon.js +1 -1
  368. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  369. package/dist/icons/ExclamationCircleIcon.js +1 -1
  370. package/dist/icons/ExclamationIcon.js +1 -1
  371. package/dist/icons/EyeIcon.js +1 -1
  372. package/dist/icons/EyeInvisibleIcon.js +1 -1
  373. package/dist/icons/FilterIcon.js +1 -1
  374. package/dist/icons/FolderFilledIcon.js +1 -1
  375. package/dist/icons/FolderIcon.js +1 -1
  376. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  377. package/dist/icons/FolderOpenIcon.js +1 -1
  378. package/dist/icons/ForwardIcon.js +1 -1
  379. package/dist/icons/GripVerticalIcon.js +1 -1
  380. package/dist/icons/HierarchyIcon.js +1 -1
  381. package/dist/icons/HierarchyOpenIcon.js +1 -1
  382. package/dist/icons/Icon.js +1 -1
  383. package/dist/icons/InfoCircleIcon.js +1 -1
  384. package/dist/icons/InfoIcon.js +1 -1
  385. package/dist/icons/KeyIcon.js +1 -1
  386. package/dist/icons/LeftIcon.js +1 -1
  387. package/dist/icons/LineChartIcon.js +1 -1
  388. package/dist/icons/LoadingIcon.js +1 -1
  389. package/dist/icons/LockFilledIcon.js +1 -1
  390. package/dist/icons/LockIcon.js +1 -1
  391. package/dist/icons/MoreIcon.js +1 -1
  392. package/dist/icons/NotAllowedIcon.js +1 -1
  393. package/dist/icons/Number123Icon.js +1 -1
  394. package/dist/icons/NumberIcon.js +1 -1
  395. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  396. package/dist/icons/PauseCircleIcon.js +1 -1
  397. package/dist/icons/PauseIcon.js +1 -1
  398. package/dist/icons/PercentageIcon.js +1 -1
  399. package/dist/icons/PieChartIcon.js +1 -1
  400. package/dist/icons/PlayCircleIcon.js +1 -1
  401. package/dist/icons/PlayIcon.js +1 -1
  402. package/dist/icons/PlusIcon.js +1 -1
  403. package/dist/icons/ProgressBarIcon.js +1 -1
  404. package/dist/icons/ReloadIcon.js +1 -1
  405. package/dist/icons/ReportIcon.js +1 -1
  406. package/dist/icons/ReturnIcon.js +1 -1
  407. package/dist/icons/RightIcon.js +1 -1
  408. package/dist/icons/RowTotalsIcon.js +1 -1
  409. package/dist/icons/SchemeIcon.js +1 -1
  410. package/dist/icons/SearchIcon.js +1 -1
  411. package/dist/icons/SemanticQueryIcon.js +1 -1
  412. package/dist/icons/SettingsIcon.js +1 -1
  413. package/dist/icons/ShieldFilledIcon.js +1 -1
  414. package/dist/icons/ShieldIcon.js +1 -1
  415. package/dist/icons/SlashIcon.js +1 -1
  416. package/dist/icons/SparklesIcon.js +1 -1
  417. package/dist/icons/SqlIcon.js +1 -1
  418. package/dist/icons/StatsIcon.js +1 -1
  419. package/dist/icons/StopIcon.js +1 -1
  420. package/dist/icons/StringIcon.js +1 -1
  421. package/dist/icons/SubtotalsIcon.js +1 -1
  422. package/dist/icons/SwitchIcon.js +1 -1
  423. package/dist/icons/TableIcon.js +1 -1
  424. package/dist/icons/ThumbsDownIcon.js +1 -1
  425. package/dist/icons/ThumbsUpIcon.js +1 -1
  426. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  427. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  428. package/dist/icons/ThunderboltIcon.js +1 -1
  429. package/dist/icons/TimeIcon.js +1 -1
  430. package/dist/icons/TrashIcon.js +1 -1
  431. package/dist/icons/UnlockIcon.js +1 -1
  432. package/dist/icons/UpIcon.js +1 -1
  433. package/dist/icons/UserGroupIcon.js +1 -1
  434. package/dist/icons/UserIcon.js +1 -1
  435. package/dist/icons/UserLockIcon.js +1 -1
  436. package/dist/icons/ViewIcon.js +1 -1
  437. package/dist/icons/WarningFilledIcon.js +1 -1
  438. package/dist/icons/WarningIcon.js +1 -1
  439. package/dist/icons/wrap-icon.js +1 -1
  440. package/dist/index.d.ts +2 -12
  441. package/dist/index.js +2 -12
  442. package/dist/index.js.map +1 -1
  443. package/dist/provider.js +1 -1
  444. package/dist/providers/TrackingProvider.js +1 -1
  445. package/dist/providers/navigationAdapter.default.js +1 -1
  446. package/dist/tokens/base.js +1 -1
  447. package/dist/tokens/colors.js +1 -1
  448. package/dist/tokens/index.js +1 -1
  449. package/dist/tokens/layout.js +1 -1
  450. package/dist/tokens/palette.js +1 -1
  451. package/dist/tokens/shadows.js +1 -1
  452. package/dist/tokens/sizes.js +1 -1
  453. package/dist/tokens/spacing.js +1 -1
  454. package/dist/tokens/typography.js +1 -1
  455. package/dist/utils/ResizeSensor.js +1 -1
  456. package/dist/utils/is-dev-env.js +1 -1
  457. package/dist/utils/modules.js +1 -1
  458. package/dist/utils/promise.js +1 -1
  459. package/dist/utils/raf.js +1 -1
  460. package/dist/utils/random.js +1 -1
  461. package/dist/utils/range.js +1 -1
  462. package/dist/utils/react/RenderCache.js +1 -1
  463. package/dist/utils/react/Slots.js +1 -1
  464. package/dist/utils/react/chain.js +1 -1
  465. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  466. package/dist/utils/react/index.js +1 -1
  467. package/dist/utils/react/interactions.js +1 -1
  468. package/dist/utils/react/isTextOnly.js +1 -1
  469. package/dist/utils/react/mapProps.js +1 -1
  470. package/dist/utils/react/mergeProps.js +1 -1
  471. package/dist/utils/react/nullableValue.js +1 -1
  472. package/dist/utils/react/resolveIcon.js +1 -1
  473. package/dist/utils/react/sharedStore.js +1 -1
  474. package/dist/utils/react/useCombinedRefs.js +1 -1
  475. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  476. package/dist/utils/react/useEventBus.js +1 -1
  477. package/dist/utils/react/useId.js +1 -1
  478. package/dist/utils/react/useIsDarwin.js +1 -1
  479. package/dist/utils/react/useKeySymbols.js +1 -1
  480. package/dist/utils/react/useLayoutEffect.js +1 -1
  481. package/dist/utils/react/useLocalStorage.js +1 -1
  482. package/dist/utils/react/useMergeStyles.js +1 -1
  483. package/dist/utils/react/usePopoverSync.js +1 -1
  484. package/dist/utils/react/useQaProps.js +1 -1
  485. package/dist/utils/react/useViewportSize.js +1 -1
  486. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  487. package/dist/utils/selection.js +1 -1
  488. package/dist/utils/styles.js +1 -1
  489. package/dist/utils/tree.js +1 -1
  490. package/dist/utils/warnings.js +1 -1
  491. package/dist/version.js +2 -2
  492. package/docs/components/layout/Board.md +35 -12
  493. package/package.json +1 -3
  494. package/dist/i18n/I18nProvider.d.ts +0 -39
  495. package/dist/i18n/I18nProvider.js +0 -43
  496. package/dist/i18n/I18nProvider.js.map +0 -1
  497. package/dist/i18n/createFormatter.d.ts +0 -59
  498. package/dist/i18n/createFormatter.js +0 -148
  499. package/dist/i18n/createFormatter.js.map +0 -1
  500. package/dist/i18n/formatting-locale.d.ts +0 -9
  501. package/dist/i18n/formatting-locale.js +0 -29
  502. package/dist/i18n/formatting-locale.js.map +0 -1
  503. package/dist/i18n/index.d.ts +0 -19
  504. package/dist/i18n/index.js +0 -22
  505. package/dist/i18n/index.js.map +0 -1
  506. package/dist/i18n/instance.d.ts +0 -14
  507. package/dist/i18n/instance.js +0 -64
  508. package/dist/i18n/instance.js.map +0 -1
  509. package/dist/i18n/locales/de-DE/uikit.js +0 -112
  510. package/dist/i18n/locales/de-DE/uikit.js.map +0 -1
  511. package/dist/i18n/locales/en-US/uikit.js +0 -112
  512. package/dist/i18n/locales/en-US/uikit.js.map +0 -1
  513. package/dist/i18n/locales/en-US/uikit.json.d.ts +0 -140
  514. package/dist/i18n/locales/es-ES/uikit.js +0 -112
  515. package/dist/i18n/locales/es-ES/uikit.js.map +0 -1
  516. package/dist/i18n/locales/es-MX/uikit.js +0 -112
  517. package/dist/i18n/locales/es-MX/uikit.js.map +0 -1
  518. package/dist/i18n/locales/fr-FR/uikit.js +0 -112
  519. package/dist/i18n/locales/fr-FR/uikit.js.map +0 -1
  520. package/dist/i18n/locales/it-IT/uikit.js +0 -112
  521. package/dist/i18n/locales/it-IT/uikit.js.map +0 -1
  522. package/dist/i18n/locales/ja-JP/uikit.js +0 -112
  523. package/dist/i18n/locales/ja-JP/uikit.js.map +0 -1
  524. package/dist/i18n/locales/nb-NO/uikit.js +0 -112
  525. package/dist/i18n/locales/nb-NO/uikit.js.map +0 -1
  526. package/dist/i18n/locales/pt-BR/uikit.js +0 -112
  527. package/dist/i18n/locales/pt-BR/uikit.js.map +0 -1
  528. package/dist/i18n/locales/pt-PT/uikit.js +0 -112
  529. package/dist/i18n/locales/pt-PT/uikit.js.map +0 -1
  530. package/dist/i18n/locales/sv-SE/uikit.js +0 -112
  531. package/dist/i18n/locales/sv-SE/uikit.js.map +0 -1
  532. package/dist/i18n/locales/vi-VN/uikit.js +0 -112
  533. package/dist/i18n/locales/vi-VN/uikit.js.map +0 -1
  534. package/dist/i18n/locales.d.ts +0 -17
  535. package/dist/i18n/locales.js +0 -45
  536. package/dist/i18n/locales.js.map +0 -1
  537. package/dist/i18n/useFormatter.d.ts +0 -33
  538. package/dist/i18n/useFormatter.js +0 -59
  539. package/dist/i18n/useFormatter.js.map +0 -1
  540. package/dist/i18n/useI18n.d.ts +0 -2
  541. package/dist/i18n/useI18n.js +0 -19
  542. package/dist/i18n/useI18n.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PersistentNotificationsList.js","names":["Text"],"sources":["../../../../src/components/overlays/Notifications/PersistentNotificationsList.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { Fragment, Key, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { useI18n } from '../../../i18n';\nimport { Divider } from '../../content/Divider';\nimport { Text } from '../../content/Text';\n\nimport { formatRelativeTime } from './format-relative-time';\nimport { NotificationActionInterceptorContext } from './NotificationAction';\nimport { NotificationCard } from './NotificationCard';\nimport { usePersistentNotifications } from './use-persistent-notifications';\n\nimport type {\n DismissReason,\n PersistentNotificationItem,\n PersistentNotificationsListProps,\n} from './types';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst MARK_READ_DELAY = 2000;\n/** Interval (ms) at which relative timestamps refresh while the list is mounted. */\nconst TIMESTAMP_REFRESH_INTERVAL = 10_000;\n\n// ─── Styled Components ──────────────────────────────────────────────\n\nconst ListContainer = tasty({\n qa: 'PersistentNotificationsList',\n role: 'log',\n styles: {\n display: 'flex',\n flow: 'column',\n },\n});\n\nconst EmptyStateContainer = tasty({\n styles: {\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n padding: '4x',\n color: '#dark.5',\n preset: 't3',\n },\n});\n\n// ─── PersistentNotificationsList Component ───────────────────────────\n\n/**\n * Standardized rendering for archived/persistent notifications.\n * Always reads items from the notification context.\n * Composable with app-specific shells (popover, dialog, page section).\n *\n * Marks all items as read after being visible for 2 seconds.\n * Relative timestamps refresh every 10 seconds while the list is mounted.\n *\n * Items are always dismissible. Dismissing an item removes it from the\n * persistent list and marks its ID as \"fully dismissed\" — subsequent triggers\n * with the same ID will be completely ignored (no overlay, no re-archival).\n *\n * @example\n * ```tsx\n * <PersistentNotificationsList emptyState=\"No notifications\" />\n * ```\n */\nexport function PersistentNotificationsList({\n onDismissItem,\n onAction,\n emptyState,\n}: PersistentNotificationsListProps) {\n const { t } = useI18n();\n const { items, remove, markAllAsRead } = usePersistentNotifications();\n const listAriaLabel = t('notifications.ariaLabel', 'Notifications');\n\n // Default dismiss handler removes the item from the persistent list (which\n // also marks the id as \"fully dismissed\" so it won't reappear).\n // If a consumer provides `onDismissItem`, it is called *after* the built-in removal.\n const handleDismiss = useEvent((item: PersistentNotificationItem) => {\n remove(item.id);\n onDismissItem?.(item);\n });\n const markReadTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Tick counter that increments every TIMESTAMP_REFRESH_INTERVAL to force\n // re-render so relative timestamps (e.g. \"5 min ago\") stay up to date.\n const [, setTick] = useState(0);\n\n useEffect(() => {\n if (items.length === 0) return;\n\n const interval = setInterval(() => {\n setTick((t) => t + 1);\n }, TIMESTAMP_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [items.length]);\n\n // Mark all persistent notifications as read after a 2s delay.\n // Re-starts the timer whenever items change (e.g. new unread items arrive\n // while the list is already visible).\n useEffect(() => {\n const hasUnread = items.some((i) => !i.isRead);\n\n if (!hasUnread) return;\n\n markReadTimerRef.current = setTimeout(() => {\n markAllAsRead();\n }, MARK_READ_DELAY);\n\n return () => {\n if (markReadTimerRef.current) {\n clearTimeout(markReadTimerRef.current);\n markReadTimerRef.current = null;\n }\n };\n }, [markAllAsRead, items]);\n\n if (items.length === 0) {\n return (\n <ListContainer aria-label={listAriaLabel}>\n <EmptyStateContainer>\n {emptyState ?? t('notifications.empty', 'No notifications')}\n </EmptyStateContainer>\n </ListContainer>\n );\n }\n\n return (\n <NotificationActionInterceptorContext.Provider value={onAction ?? null}>\n <ListContainer aria-label={listAriaLabel}>\n {items.map((item, index) => (\n <Fragment key={String(item.id)}>\n {index > 0 && <Divider />}\n <PersistentNotificationListItem\n item={item}\n onDismiss={handleDismiss}\n />\n </Fragment>\n ))}\n </ListContainer>\n </NotificationActionInterceptorContext.Provider>\n );\n}\n\n// ─── List Item ───────────────────────────────────────────────────────\n\ninterface PersistentNotificationListItemProps {\n item: PersistentNotificationItem;\n onDismiss?: (item: PersistentNotificationItem) => void;\n}\n\nfunction PersistentNotificationListItem({\n item,\n onDismiss,\n}: PersistentNotificationListItemProps) {\n const { t } = useI18n();\n const suffix = (\n <Text opacity={0.5} preset=\"c2\">\n {formatRelativeTime(item.createdAt, t)}\n </Text>\n );\n\n // useEvent keeps the callback stable across re-renders regardless of\n // item reference changes (avoids unnecessary NotificationCard re-renders).\n const handleDismiss = useEvent((_id: Key, _reason: DismissReason) => {\n onDismiss?.(item);\n });\n\n const parentInterceptor = useContext(NotificationActionInterceptorContext);\n\n // Chains with the list-level interceptor (e.g. closing the parent popover).\n // Dismissal itself is handled by NotificationAction via the dismiss context\n // to avoid double-firing onDismiss.\n const handleItemAction = useEvent(() => {\n parentInterceptor?.();\n });\n\n return (\n <NotificationActionInterceptorContext.Provider value={handleItemAction}>\n <NotificationCard\n qa=\"PersistentNotificationItem\"\n theme={item.theme}\n title={item.title}\n description={item.description}\n icon={item.icon}\n actions={item.actions}\n isDismissable={!!onDismiss}\n elevated={false}\n notificationId={item.id}\n suffix={suffix}\n onDismiss={onDismiss ? handleDismiss : undefined}\n />\n </NotificationActionInterceptorContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAqBA,MAAM,kBAAkB;;AAExB,MAAM,6BAA6B;AAInC,MAAM,gBAAgB,MAAM;CAC1B,IAAI;CACJ,MAAM;CACN,QAAQ;EACN,SAAS;EACT,MAAM;EACP;CACF,CAAC;AAEF,MAAM,sBAAsB,MAAM,EAChC,QAAQ;CACN,SAAS;CACT,YAAY;CACZ,cAAc;CACd,SAAS;CACT,OAAO;CACP,QAAQ;CACT,EACF,CAAC;;;;;;;;;;;;;;;;;;AAqBF,SAAgB,4BAA4B,EAC1C,eACA,UACA,cACmC;CACnC,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,EAAE,OAAO,QAAQ,kBAAkB,4BAA4B;CACrE,MAAM,gBAAgB,EAAE,2BAA2B,gBAAgB;CAKnE,MAAM,gBAAgB,UAAU,SAAqC;AACnE,SAAO,KAAK,GAAG;AACf,kBAAgB,KAAK;GACrB;CACF,MAAM,mBAAmB,OAA6C,KAAK;CAI3E,MAAM,GAAG,WAAW,SAAS,EAAE;AAE/B,iBAAgB;AACd,MAAI,MAAM,WAAW,EAAG;EAExB,MAAM,WAAW,kBAAkB;AACjC,YAAS,MAAM,IAAI,EAAE;KACpB,2BAA2B;AAE9B,eAAa,cAAc,SAAS;IACnC,CAAC,MAAM,OAAO,CAAC;AAKlB,iBAAgB;AAGd,MAAI,CAFc,MAAM,MAAM,MAAM,CAAC,EAAE,OAAO,CAE9B;AAEhB,mBAAiB,UAAU,iBAAiB;AAC1C,kBAAe;KACd,gBAAgB;AAEnB,eAAa;AACX,OAAI,iBAAiB,SAAS;AAC5B,iBAAa,iBAAiB,QAAQ;AACtC,qBAAiB,UAAU;;;IAG9B,CAAC,eAAe,MAAM,CAAC;AAE1B,KAAI,MAAM,WAAW,EACnB,QACE,oBAAC;EAAc,cAAY;YACzB,oBAAC,iCACE,cAAc,EAAE,uBAAuB,mBAAmB,GACvC;GACR;AAIpB,QACE,oBAAC,qCAAqC;EAAS,OAAO,YAAY;YAChE,oBAAC;GAAc,cAAY;aACxB,MAAM,KAAK,MAAM,UAChB,qBAAC,uBACE,QAAQ,KAAK,oBAAC,YAAU,EACzB,oBAAC;IACO;IACN,WAAW;KACX,KALW,OAAO,KAAK,GAAG,CAMnB,CACX;IACY;GAC8B;;AAWpD,SAAS,+BAA+B,EACtC,MACA,aACsC;CACtC,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,SACJ,oBAACA;EAAK,SAAS;EAAK,QAAO;YACxB,mBAAmB,KAAK,WAAW,EAAE;GACjC;CAKT,MAAM,gBAAgB,UAAU,KAAU,YAA2B;AACnE,cAAY,KAAK;GACjB;CAEF,MAAM,oBAAoB,WAAW,qCAAqC;CAK1E,MAAM,mBAAmB,eAAe;AACtC,uBAAqB;GACrB;AAEF,QACE,oBAAC,qCAAqC;EAAS,OAAO;YACpD,oBAAC;GACC,IAAG;GACH,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,SAAS,KAAK;GACd,eAAe,CAAC,CAAC;GACjB,UAAU;GACV,gBAAgB,KAAK;GACb;GACR,WAAW,YAAY,gBAAgB;IACvC;GAC4C"}
1
+ {"version":3,"file":"PersistentNotificationsList.js","names":["Text"],"sources":["../../../../src/components/overlays/Notifications/PersistentNotificationsList.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { Fragment, Key, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { Divider } from '../../content/Divider';\nimport { Text } from '../../content/Text';\n\nimport { formatRelativeTime } from './format-relative-time';\nimport { NotificationActionInterceptorContext } from './NotificationAction';\nimport { NotificationCard } from './NotificationCard';\nimport { usePersistentNotifications } from './use-persistent-notifications';\n\nimport type {\n DismissReason,\n PersistentNotificationItem,\n PersistentNotificationsListProps,\n} from './types';\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst MARK_READ_DELAY = 2000;\n/** Interval (ms) at which relative timestamps refresh while the list is mounted. */\nconst TIMESTAMP_REFRESH_INTERVAL = 10_000;\n\n// ─── Styled Components ──────────────────────────────────────────────\n\nconst ListContainer = tasty({\n qa: 'PersistentNotificationsList',\n role: 'log',\n 'aria-label': 'Notifications',\n styles: {\n display: 'flex',\n flow: 'column',\n },\n});\n\nconst EmptyStateContainer = tasty({\n styles: {\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n padding: '4x',\n color: '#dark.5',\n preset: 't3',\n },\n});\n\n// ─── PersistentNotificationsList Component ───────────────────────────\n\n/**\n * Standardized rendering for archived/persistent notifications.\n * Always reads items from the notification context.\n * Composable with app-specific shells (popover, dialog, page section).\n *\n * Marks all items as read after being visible for 2 seconds.\n * Relative timestamps refresh every 10 seconds while the list is mounted.\n *\n * Items are always dismissible. Dismissing an item removes it from the\n * persistent list and marks its ID as \"fully dismissed\" — subsequent triggers\n * with the same ID will be completely ignored (no overlay, no re-archival).\n *\n * @example\n * ```tsx\n * <PersistentNotificationsList emptyState=\"No notifications\" />\n * ```\n */\nexport function PersistentNotificationsList({\n onDismissItem,\n onAction,\n emptyState,\n}: PersistentNotificationsListProps) {\n const { items, remove, markAllAsRead } = usePersistentNotifications();\n\n // Default dismiss handler removes the item from the persistent list (which\n // also marks the id as \"fully dismissed\" so it won't reappear).\n // If a consumer provides `onDismissItem`, it is called *after* the built-in removal.\n const handleDismiss = useEvent((item: PersistentNotificationItem) => {\n remove(item.id);\n onDismissItem?.(item);\n });\n const markReadTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Tick counter that increments every TIMESTAMP_REFRESH_INTERVAL to force\n // re-render so relative timestamps (e.g. \"5 min ago\") stay up to date.\n const [, setTick] = useState(0);\n\n useEffect(() => {\n if (items.length === 0) return;\n\n const interval = setInterval(() => {\n setTick((t) => t + 1);\n }, TIMESTAMP_REFRESH_INTERVAL);\n\n return () => clearInterval(interval);\n }, [items.length]);\n\n // Mark all persistent notifications as read after a 2s delay.\n // Re-starts the timer whenever items change (e.g. new unread items arrive\n // while the list is already visible).\n useEffect(() => {\n const hasUnread = items.some((i) => !i.isRead);\n\n if (!hasUnread) return;\n\n markReadTimerRef.current = setTimeout(() => {\n markAllAsRead();\n }, MARK_READ_DELAY);\n\n return () => {\n if (markReadTimerRef.current) {\n clearTimeout(markReadTimerRef.current);\n markReadTimerRef.current = null;\n }\n };\n }, [markAllAsRead, items]);\n\n if (items.length === 0) {\n return (\n <ListContainer>\n <EmptyStateContainer>\n {emptyState ?? 'No notifications'}\n </EmptyStateContainer>\n </ListContainer>\n );\n }\n\n return (\n <NotificationActionInterceptorContext.Provider value={onAction ?? null}>\n <ListContainer>\n {items.map((item, index) => (\n <Fragment key={String(item.id)}>\n {index > 0 && <Divider />}\n <PersistentNotificationListItem\n item={item}\n onDismiss={handleDismiss}\n />\n </Fragment>\n ))}\n </ListContainer>\n </NotificationActionInterceptorContext.Provider>\n );\n}\n\n// ─── List Item ───────────────────────────────────────────────────────\n\ninterface PersistentNotificationListItemProps {\n item: PersistentNotificationItem;\n onDismiss?: (item: PersistentNotificationItem) => void;\n}\n\nfunction PersistentNotificationListItem({\n item,\n onDismiss,\n}: PersistentNotificationListItemProps) {\n const suffix = (\n <Text opacity={0.5} preset=\"c2\">\n {formatRelativeTime(item.createdAt)}\n </Text>\n );\n\n // useEvent keeps the callback stable across re-renders regardless of\n // item reference changes (avoids unnecessary NotificationCard re-renders).\n const handleDismiss = useEvent((_id: Key, _reason: DismissReason) => {\n onDismiss?.(item);\n });\n\n const parentInterceptor = useContext(NotificationActionInterceptorContext);\n\n // Chains with the list-level interceptor (e.g. closing the parent popover).\n // Dismissal itself is handled by NotificationAction via the dismiss context\n // to avoid double-firing onDismiss.\n const handleItemAction = useEvent(() => {\n parentInterceptor?.();\n });\n\n return (\n <NotificationActionInterceptorContext.Provider value={handleItemAction}>\n <NotificationCard\n qa=\"PersistentNotificationItem\"\n theme={item.theme}\n title={item.title}\n description={item.description}\n icon={item.icon}\n actions={item.actions}\n isDismissable={!!onDismiss}\n elevated={false}\n notificationId={item.id}\n suffix={suffix}\n onDismiss={onDismiss ? handleDismiss : undefined}\n />\n </NotificationActionInterceptorContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,MAAM,kBAAkB;;AAExB,MAAM,6BAA6B;AAInC,MAAM,gBAAgB,MAAM;CAC1B,IAAI;CACJ,MAAM;CACN,cAAc;CACd,QAAQ;EACN,SAAS;EACT,MAAM;EACP;CACF,CAAC;AAEF,MAAM,sBAAsB,MAAM,EAChC,QAAQ;CACN,SAAS;CACT,YAAY;CACZ,cAAc;CACd,SAAS;CACT,OAAO;CACP,QAAQ;CACT,EACF,CAAC;;;;;;;;;;;;;;;;;;AAqBF,SAAgB,4BAA4B,EAC1C,eACA,UACA,cACmC;CACnC,MAAM,EAAE,OAAO,QAAQ,kBAAkB,4BAA4B;CAKrE,MAAM,gBAAgB,UAAU,SAAqC;AACnE,SAAO,KAAK,GAAG;AACf,kBAAgB,KAAK;GACrB;CACF,MAAM,mBAAmB,OAA6C,KAAK;CAI3E,MAAM,GAAG,WAAW,SAAS,EAAE;AAE/B,iBAAgB;AACd,MAAI,MAAM,WAAW,EAAG;EAExB,MAAM,WAAW,kBAAkB;AACjC,YAAS,MAAM,IAAI,EAAE;KACpB,2BAA2B;AAE9B,eAAa,cAAc,SAAS;IACnC,CAAC,MAAM,OAAO,CAAC;AAKlB,iBAAgB;AAGd,MAAI,CAFc,MAAM,MAAM,MAAM,CAAC,EAAE,OAAO,CAE9B;AAEhB,mBAAiB,UAAU,iBAAiB;AAC1C,kBAAe;KACd,gBAAgB;AAEnB,eAAa;AACX,OAAI,iBAAiB,SAAS;AAC5B,iBAAa,iBAAiB,QAAQ;AACtC,qBAAiB,UAAU;;;IAG9B,CAAC,eAAe,MAAM,CAAC;AAE1B,KAAI,MAAM,WAAW,EACnB,QACE,oBAAC,2BACC,oBAAC,iCACE,cAAc,qBACK,GACR;AAIpB,QACE,oBAAC,qCAAqC;EAAS,OAAO,YAAY;YAChE,oBAAC,2BACE,MAAM,KAAK,MAAM,UAChB,qBAAC,uBACE,QAAQ,KAAK,oBAAC,YAAU,EACzB,oBAAC;GACO;GACN,WAAW;IACX,KALW,OAAO,KAAK,GAAG,CAMnB,CACX,GACY;GAC8B;;AAWpD,SAAS,+BAA+B,EACtC,MACA,aACsC;CACtC,MAAM,SACJ,oBAACA;EAAK,SAAS;EAAK,QAAO;YACxB,mBAAmB,KAAK,UAAU;GAC9B;CAKT,MAAM,gBAAgB,UAAU,KAAU,YAA2B;AACnE,cAAY,KAAK;GACjB;CAEF,MAAM,oBAAoB,WAAW,qCAAqC;CAK1E,MAAM,mBAAmB,eAAe;AACtC,uBAAqB;GACrB;AAEF,QACE,oBAAC,qCAAqC;EAAS,OAAO;YACpD,oBAAC;GACC,IAAG;GACH,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,SAAS,KAAK;GACd,eAAe,CAAC,CAAC;GACjB,UAAU;GACV,gBAAgB,KAAK;GACb;GACR,WAAW,YAAY,gBAAgB;IACvC;GAC4C"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  //#region src/components/overlays/Notifications/dismissed-storage.ts
3
3
  const STORAGE_KEY = "cube-ui-dismissed-notifications";
4
4
  const TTL_MS = 864e5;
@@ -1,12 +1,10 @@
1
1
 
2
- import { TFunction } from "i18next";
3
-
4
2
  //#region src/components/overlays/Notifications/format-relative-time.d.ts
5
3
  /**
6
4
  * Lightweight relative time formatter.
5
+ * No external dependencies.
7
6
  *
8
- * Output format (English source; localized via the `uikit` bundle's
9
- * `relativeTime.*` keys):
7
+ * Output format:
10
8
  * - `just now` (< 1 minute)
11
9
  * - `N min ago` (1–59 minutes)
12
10
  * - `N h ago` (1–23 hours)
@@ -14,12 +12,8 @@ import { TFunction } from "i18next";
14
12
  * - `N w ago` (1–4 weeks)
15
13
  * - `N mo ago` (1–11 months)
16
14
  * - `N y ago` (1+ years)
17
- *
18
- * `t` is the UI Kit translation function (from `useI18n`), passed
19
- * in so the string reacts to the active language. When omitted (non-component
20
- * callers), English defaults are used.
21
15
  */
22
- declare function formatRelativeTime(timestamp: number, t?: TFunction): string;
16
+ declare function formatRelativeTime(timestamp: number): string;
23
17
  //#endregion
24
18
  export { formatRelativeTime };
25
19
  //# sourceMappingURL=format-relative-time.d.ts.map
@@ -1,10 +1,10 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  //#region src/components/overlays/Notifications/format-relative-time.ts
3
3
  /**
4
4
  * Lightweight relative time formatter.
5
+ * No external dependencies.
5
6
  *
6
- * Output format (English source; localized via the `uikit` bundle's
7
- * `relativeTime.*` keys):
7
+ * Output format:
8
8
  * - `just now` (< 1 minute)
9
9
  * - `N min ago` (1–59 minutes)
10
10
  * - `N h ago` (1–23 hours)
@@ -12,31 +12,23 @@
12
12
  * - `N w ago` (1–4 weeks)
13
13
  * - `N mo ago` (1–11 months)
14
14
  * - `N y ago` (1+ years)
15
- *
16
- * `t` is the UI Kit translation function (from `useI18n`), passed
17
- * in so the string reacts to the active language. When omitted (non-component
18
- * callers), English defaults are used.
19
15
  */
20
- function formatRelativeTime(timestamp, t) {
21
- const translate = (key, defaultValue, count) => {
22
- if (t) return t(key, defaultValue, count != null ? { count } : void 0);
23
- return count != null ? defaultValue.replace("{{count}}", String(count)) : defaultValue;
24
- };
16
+ function formatRelativeTime(timestamp) {
25
17
  const diffMs = Date.now() - timestamp;
26
- if (diffMs < 0) return translate("relativeTime.justNow", "just now");
18
+ if (diffMs < 0) return "just now";
27
19
  const diffSeconds = Math.floor(diffMs / 1e3);
28
20
  const diffMinutes = Math.floor(diffSeconds / 60);
29
21
  const diffHours = Math.floor(diffMinutes / 60);
30
22
  const diffDays = Math.floor(diffHours / 24);
31
- if (diffMinutes < 1) return translate("relativeTime.justNow", "just now");
32
- if (diffHours < 1) return translate("relativeTime.minAgo", "{{count}} min ago", diffMinutes);
33
- if (diffDays < 1) return translate("relativeTime.hoursAgo", "{{count}} h ago", diffHours);
34
- if (diffDays < 7) return translate("relativeTime.daysAgo", "{{count}} d ago", diffDays);
23
+ if (diffMinutes < 1) return "just now";
24
+ if (diffHours < 1) return `${diffMinutes} min ago`;
25
+ if (diffDays < 1) return `${diffHours} h ago`;
26
+ if (diffDays < 7) return `${diffDays} d ago`;
35
27
  const diffWeeks = Math.floor(diffDays / 7);
36
- if (diffDays < 30) return translate("relativeTime.weeksAgo", "{{count}} w ago", diffWeeks);
28
+ if (diffDays < 30) return `${diffWeeks} w ago`;
37
29
  const diffMonths = Math.floor(diffDays / 30);
38
- if (diffDays < 365) return translate("relativeTime.monthsAgo", "{{count}} mo ago", diffMonths);
39
- return translate("relativeTime.yearsAgo", "{{count}} y ago", Math.floor(diffDays / 365));
30
+ if (diffDays < 365) return `${diffMonths} mo ago`;
31
+ return `${Math.floor(diffDays / 365)} y ago`;
40
32
  }
41
33
 
42
34
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"format-relative-time.js","names":[],"sources":["../../../../src/components/overlays/Notifications/format-relative-time.ts"],"sourcesContent":["import type { TFunction } from 'i18next';\n\n/**\n * Lightweight relative time formatter.\n *\n * Output format (English source; localized via the `uikit` bundle's\n * `relativeTime.*` keys):\n * - `just now` (< 1 minute)\n * - `N min ago` (1–59 minutes)\n * - `N h ago` (1–23 hours)\n * - `N d ago` (1–6 days)\n * - `N w ago` (1–4 weeks)\n * - `N mo ago` (1–11 months)\n * - `N y ago` (1+ years)\n *\n * `t` is the UI Kit translation function (from `useI18n`), passed\n * in so the string reacts to the active language. When omitted (non-component\n * callers), English defaults are used.\n */\nexport function formatRelativeTime(timestamp: number, t?: TFunction): string {\n const translate = (\n key: string,\n defaultValue: string,\n count?: number,\n ): string => {\n if (t) {\n return t(key, defaultValue, count != null ? { count } : undefined);\n }\n\n return count != null\n ? defaultValue.replace('{{count}}', String(count))\n : defaultValue;\n };\n\n const now = Date.now();\n const diffMs = now - timestamp;\n\n if (diffMs < 0) {\n return translate('relativeTime.justNow', 'just now');\n }\n\n const diffSeconds = Math.floor(diffMs / 1000);\n const diffMinutes = Math.floor(diffSeconds / 60);\n const diffHours = Math.floor(diffMinutes / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMinutes < 1) {\n return translate('relativeTime.justNow', 'just now');\n }\n\n if (diffHours < 1) {\n return translate('relativeTime.minAgo', '{{count}} min ago', diffMinutes);\n }\n\n if (diffDays < 1) {\n return translate('relativeTime.hoursAgo', '{{count}} h ago', diffHours);\n }\n\n if (diffDays < 7) {\n return translate('relativeTime.daysAgo', '{{count}} d ago', diffDays);\n }\n\n const diffWeeks = Math.floor(diffDays / 7);\n\n if (diffDays < 30) {\n return translate('relativeTime.weeksAgo', '{{count}} w ago', diffWeeks);\n }\n\n const diffMonths = Math.floor(diffDays / 30);\n\n if (diffDays < 365) {\n return translate('relativeTime.monthsAgo', '{{count}} mo ago', diffMonths);\n }\n\n const diffYears = Math.floor(diffDays / 365);\n\n return translate('relativeTime.yearsAgo', '{{count}} y ago', diffYears);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBAAmB,WAAmB,GAAuB;CAC3E,MAAM,aACJ,KACA,cACA,UACW;AACX,MAAI,EACF,QAAO,EAAE,KAAK,cAAc,SAAS,OAAO,EAAE,OAAO,GAAG,OAAU;AAGpE,SAAO,SAAS,OACZ,aAAa,QAAQ,aAAa,OAAO,MAAM,CAAC,GAChD;;CAIN,MAAM,SADM,KAAK,KAAK,GACD;AAErB,KAAI,SAAS,EACX,QAAO,UAAU,wBAAwB,WAAW;CAGtD,MAAM,cAAc,KAAK,MAAM,SAAS,IAAK;CAC7C,MAAM,cAAc,KAAK,MAAM,cAAc,GAAG;CAChD,MAAM,YAAY,KAAK,MAAM,cAAc,GAAG;CAC9C,MAAM,WAAW,KAAK,MAAM,YAAY,GAAG;AAE3C,KAAI,cAAc,EAChB,QAAO,UAAU,wBAAwB,WAAW;AAGtD,KAAI,YAAY,EACd,QAAO,UAAU,uBAAuB,qBAAqB,YAAY;AAG3E,KAAI,WAAW,EACb,QAAO,UAAU,yBAAyB,mBAAmB,UAAU;AAGzE,KAAI,WAAW,EACb,QAAO,UAAU,wBAAwB,mBAAmB,SAAS;CAGvE,MAAM,YAAY,KAAK,MAAM,WAAW,EAAE;AAE1C,KAAI,WAAW,GACb,QAAO,UAAU,yBAAyB,mBAAmB,UAAU;CAGzE,MAAM,aAAa,KAAK,MAAM,WAAW,GAAG;AAE5C,KAAI,WAAW,IACb,QAAO,UAAU,0BAA0B,oBAAoB,WAAW;AAK5E,QAAO,UAAU,yBAAyB,mBAFxB,KAAK,MAAM,WAAW,IAAI,CAE2B"}
1
+ {"version":3,"file":"format-relative-time.js","names":[],"sources":["../../../../src/components/overlays/Notifications/format-relative-time.ts"],"sourcesContent":["/**\n * Lightweight relative time formatter.\n * No external dependencies.\n *\n * Output format:\n * - `just now` (< 1 minute)\n * - `N min ago` (1–59 minutes)\n * - `N h ago` (1–23 hours)\n * - `N d ago` (1–6 days)\n * - `N w ago` (1–4 weeks)\n * - `N mo ago` (1–11 months)\n * - `N y ago` (1+ years)\n */\nexport function formatRelativeTime(timestamp: number): string {\n const now = Date.now();\n const diffMs = now - timestamp;\n\n if (diffMs < 0) {\n return 'just now';\n }\n\n const diffSeconds = Math.floor(diffMs / 1000);\n const diffMinutes = Math.floor(diffSeconds / 60);\n const diffHours = Math.floor(diffMinutes / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMinutes < 1) {\n return 'just now';\n }\n\n if (diffHours < 1) {\n return `${diffMinutes} min ago`;\n }\n\n if (diffDays < 1) {\n return `${diffHours} h ago`;\n }\n\n if (diffDays < 7) {\n return `${diffDays} d ago`;\n }\n\n const diffWeeks = Math.floor(diffDays / 7);\n\n if (diffDays < 30) {\n return `${diffWeeks} w ago`;\n }\n\n const diffMonths = Math.floor(diffDays / 30);\n\n if (diffDays < 365) {\n return `${diffMonths} mo ago`;\n }\n\n const diffYears = Math.floor(diffDays / 365);\n\n return `${diffYears} y ago`;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAaA,SAAgB,mBAAmB,WAA2B;CAE5D,MAAM,SADM,KAAK,KAAK,GACD;AAErB,KAAI,SAAS,EACX,QAAO;CAGT,MAAM,cAAc,KAAK,MAAM,SAAS,IAAK;CAC7C,MAAM,cAAc,KAAK,MAAM,cAAc,GAAG;CAChD,MAAM,YAAY,KAAK,MAAM,cAAc,GAAG;CAC9C,MAAM,WAAW,KAAK,MAAM,YAAY,GAAG;AAE3C,KAAI,cAAc,EAChB,QAAO;AAGT,KAAI,YAAY,EACd,QAAO,GAAG,YAAY;AAGxB,KAAI,WAAW,EACb,QAAO,GAAG,UAAU;AAGtB,KAAI,WAAW,EACb,QAAO,GAAG,SAAS;CAGrB,MAAM,YAAY,KAAK,MAAM,WAAW,EAAE;AAE1C,KAAI,WAAW,GACb,QAAO,GAAG,UAAU;CAGtB,MAAM,aAAa,KAAK,MAAM,WAAW,GAAG;AAE5C,KAAI,WAAW,IACb,QAAO,GAAG,WAAW;AAKvB,QAAO,GAFW,KAAK,MAAM,WAAW,IAAI,CAExB"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useToastContext } from "./NotificationContext.js";
3
3
  import { NotificationAction } from "./NotificationAction.js";
4
4
  import { NotificationCard } from "./NotificationCard.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useWarn } from "../../../_internal/hooks/use-warn.js";
4
4
  import { useNotificationContext } from "./NotificationContext.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { usePersistentNotificationsContext } from "./NotificationContext.js";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { cleanupAndGetValidIds, saveDismissedId } from "./dismissed-storage.js";
4
4
  import { useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { _Item } from "../../content/Item/Item.js";
3
3
  import { getThemeIcon } from "./useToast.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useToastContext } from "../Notifications/NotificationContext.js";
3
3
  import { useProgressToast } from "./useProgressToast.js";
4
4
  import { getThemeIcon, useToast } from "./useToast.js";
@@ -1,7 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
4
- import { useI18n } from "../../../i18n/useI18n.js";
5
4
  import { useToastContext } from "../Notifications/NotificationContext.js";
6
5
  import { useEffect, useRef } from "react";
7
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -49,7 +48,6 @@ function getStringValue(value) {
49
48
  */
50
49
  function useProgressToast(options) {
51
50
  const { addToast, removeToast, updateToast } = useToastContext();
52
- const { t } = useI18n();
53
51
  const toastIdRef = useRef(null);
54
52
  const wasLoadingRef = useRef(null);
55
53
  const hideTimerRef = useRef(null);
@@ -108,7 +106,7 @@ function useProgressToast(options) {
108
106
  isSelected: true,
109
107
  type: "outline",
110
108
  onPress: handleHide,
111
- children: t("toast.hide", "Hide")
109
+ children: "Hide"
112
110
  }) : null;
113
111
  const mergedActions = hideAction ? /* @__PURE__ */ jsxs(Fragment$1, { children: [currentToastData.actions, hideAction] }) : currentToastData.actions;
114
112
  const toastData = {
@@ -171,8 +169,7 @@ function useProgressToast(options) {
171
169
  addToast,
172
170
  removeToast,
173
171
  updateToast,
174
- handleHide,
175
- t
172
+ handleHide
176
173
  ]);
177
174
  useEffect(() => {
178
175
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useProgressToast.js","names":[],"sources":["../../../../src/components/overlays/Toast/useProgressToast.tsx"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { useI18n } from '../../../i18n';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\n\nimport { useToastContext } from './ToastProvider';\n\nimport type {\n ProgressToastEmpty,\n ProgressToastOptions,\n ToastData,\n} from './types';\n\nconst RESULT_DURATION = 3000;\n\n/**\n * Check if the options represent an \"empty\" value (null, undefined, false, or empty object).\n * When empty, the hook should immediately remove any existing toast.\n */\nfunction isEmptyOptions(\n options: ProgressToastOptions | ProgressToastEmpty,\n): options is ProgressToastEmpty {\n if (options == null || options === false) return true;\n if (typeof options === 'object' && Object.keys(options).length === 0)\n return true;\n return false;\n}\n\n// Get string value for comparison (only strings are compared for re-show logic)\nfunction getStringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Hook to display a progress toast that persists while loading.\n *\n * @example\n * ```tsx\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : { isLoading: false, title: 'Saved!', icon: <IconCheck />, theme: 'success' }\n * );\n *\n * // Or with error handling:\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : isError\n * ? { isLoading: false, title: 'Error', description: errorMessage, theme: 'danger' }\n * : { isLoading: false, title: 'Saved!', theme: 'success' }\n * );\n *\n * // Pass empty value to immediately remove any existing toast:\n * useProgressToast(shouldShow ? { isLoading: true, title: 'Loading...' } : null);\n *\n * // Or call with no argument to dismiss:\n * useProgressToast();\n * ```\n */\nexport function useProgressToast(\n options?: ProgressToastOptions | ProgressToastEmpty,\n): void {\n const { addToast, removeToast, updateToast } = useToastContext();\n const { t } = useI18n();\n\n const toastIdRef = useRef<Key | null>(null);\n const wasLoadingRef = useRef<boolean | null>(null);\n const hideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isFirstRenderRef = useRef(true);\n const optionsRef = useRef(options);\n const hasBeenLoadingRef = useRef(false);\n const hiddenByUserRef = useRef(false);\n\n // Track previous string values for re-show comparison\n const prevThemeRef = useRef<string | undefined>(undefined);\n const prevTitleRef = useRef<string | undefined>(undefined);\n const prevDescriptionRef = useRef<string | undefined>(undefined);\n\n // Always update optionsRef to latest\n optionsRef.current = options;\n\n // Clear any pending hide timer\n const clearHideTimer = () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n // Check if current options are empty\n const isEmpty = isEmptyOptions(options);\n\n // Extract values only when options are not empty\n const isLoading = isEmpty ? false : options.isLoading;\n const isDismissable = isEmpty ? false : !!options.isDismissable;\n const currentTheme = isEmpty ? undefined : options.theme;\n const currentTitle = isEmpty ? undefined : getStringValue(options.title);\n const currentDescription = isEmpty\n ? undefined\n : getStringValue(options.description);\n\n const handleHide = useEvent(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n hiddenByUserRef.current = true;\n });\n\n useEffect(() => {\n const wasLoading = wasLoadingRef.current;\n const isFirstRender = isFirstRenderRef.current;\n const currentOptions = optionsRef.current;\n const currentIsEmpty = isEmptyOptions(currentOptions);\n\n // Handle empty options - immediately remove any existing toast\n if (currentIsEmpty) {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n // Reset loading gate so the next cycle requires isLoading again\n hasBeenLoadingRef.current = false;\n hiddenByUserRef.current = false;\n wasLoadingRef.current = null;\n isFirstRenderRef.current = false;\n prevThemeRef.current = undefined;\n prevTitleRef.current = undefined;\n prevDescriptionRef.current = undefined;\n return;\n }\n\n // From here, we know options is a valid ProgressToastOptions\n const {\n isLoading: currentIsLoading,\n isDismissable: _isDismissable,\n ...currentToastData\n } = currentOptions;\n\n // Check if meaningful data changed (only string values)\n const themeChanged = currentTheme !== prevThemeRef.current;\n const titleChanged = currentTitle !== prevTitleRef.current;\n const descriptionChanged =\n currentDescription !== prevDescriptionRef.current;\n const dataChanged = themeChanged || titleChanged || descriptionChanged;\n\n const hideAction =\n isDismissable && currentIsLoading ? (\n <ItemAction isSelected type=\"outline\" onPress={handleHide}>\n {t('toast.hide', 'Hide')}\n </ItemAction>\n ) : null;\n\n const mergedActions = hideAction ? (\n <>\n {currentToastData.actions}\n {hideAction}\n </>\n ) : (\n currentToastData.actions\n );\n\n const toastData: ToastData = {\n title: undefined,\n description: undefined,\n theme: undefined,\n icon: undefined,\n itemProps: undefined,\n ...currentToastData,\n actions: mergedActions,\n isLoading: currentIsLoading,\n duration: null,\n };\n\n // Show a new toast or update an existing one in-place (no exit/enter animation).\n const showToast = () => {\n if (toastIdRef.current != null) {\n updateToast(toastIdRef.current, toastData);\n } else {\n toastIdRef.current = addToast(toastData, true);\n }\n };\n\n // Show/update toast and schedule removal after RESULT_DURATION.\n const showToastWithTimer = () => {\n showToast();\n\n hideTimerRef.current = setTimeout(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }, RESULT_DURATION);\n };\n\n if (currentIsLoading) {\n // Starting or continuing loading\n hasBeenLoadingRef.current = true;\n clearHideTimer();\n\n if (hiddenByUserRef.current) {\n // User dismissed the loading toast; don't re-show during this loading cycle.\n } else if (toastIdRef.current == null) {\n // Create new toast\n showToast();\n } else if (dataChanged) {\n // Toast exists but data changed (e.g., switching back to loading from another state)\n showToast();\n }\n } else if (wasLoading === true && !currentIsLoading) {\n // Transitioning from loading to not loading\n hiddenByUserRef.current = false;\n clearHideTimer();\n\n if (currentTitle) {\n // Show result toast with timer\n showToastWithTimer();\n } else {\n // No content - just remove the loading toast immediately\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n } else if (\n !currentIsLoading &&\n !isFirstRender &&\n hasBeenLoadingRef.current &&\n dataChanged &&\n toastIdRef.current != null\n ) {\n // Not loading, data changed while toast is still visible — update it.\n if (currentTitle) {\n clearHideTimer();\n showToastWithTimer();\n } else {\n clearHideTimer();\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n\n // Update refs for next comparison\n wasLoadingRef.current = currentIsLoading;\n isFirstRenderRef.current = false;\n prevThemeRef.current = currentTheme;\n prevTitleRef.current = currentTitle;\n prevDescriptionRef.current = currentDescription;\n }, [\n isEmpty,\n isLoading,\n isDismissable,\n currentTheme,\n currentTitle,\n currentDescription,\n addToast,\n removeToast,\n updateToast,\n handleHide,\n t,\n ]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n };\n }, [removeToast]);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useProgressToast.js","names":[],"sources":["../../../../src/components/overlays/Toast/useProgressToast.tsx"],"sourcesContent":["import { Key, useEffect, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\n\nimport { useToastContext } from './ToastProvider';\n\nimport type {\n ProgressToastEmpty,\n ProgressToastOptions,\n ToastData,\n} from './types';\n\nconst RESULT_DURATION = 3000;\n\n/**\n * Check if the options represent an \"empty\" value (null, undefined, false, or empty object).\n * When empty, the hook should immediately remove any existing toast.\n */\nfunction isEmptyOptions(\n options: ProgressToastOptions | ProgressToastEmpty,\n): options is ProgressToastEmpty {\n if (options == null || options === false) return true;\n if (typeof options === 'object' && Object.keys(options).length === 0)\n return true;\n return false;\n}\n\n// Get string value for comparison (only strings are compared for re-show logic)\nfunction getStringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Hook to display a progress toast that persists while loading.\n *\n * @example\n * ```tsx\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : { isLoading: false, title: 'Saved!', icon: <IconCheck />, theme: 'success' }\n * );\n *\n * // Or with error handling:\n * useProgressToast(\n * isLoading\n * ? { isLoading: true, title: 'Saving...', icon: <Spinner /> }\n * : isError\n * ? { isLoading: false, title: 'Error', description: errorMessage, theme: 'danger' }\n * : { isLoading: false, title: 'Saved!', theme: 'success' }\n * );\n *\n * // Pass empty value to immediately remove any existing toast:\n * useProgressToast(shouldShow ? { isLoading: true, title: 'Loading...' } : null);\n *\n * // Or call with no argument to dismiss:\n * useProgressToast();\n * ```\n */\nexport function useProgressToast(\n options?: ProgressToastOptions | ProgressToastEmpty,\n): void {\n const { addToast, removeToast, updateToast } = useToastContext();\n\n const toastIdRef = useRef<Key | null>(null);\n const wasLoadingRef = useRef<boolean | null>(null);\n const hideTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isFirstRenderRef = useRef(true);\n const optionsRef = useRef(options);\n const hasBeenLoadingRef = useRef(false);\n const hiddenByUserRef = useRef(false);\n\n // Track previous string values for re-show comparison\n const prevThemeRef = useRef<string | undefined>(undefined);\n const prevTitleRef = useRef<string | undefined>(undefined);\n const prevDescriptionRef = useRef<string | undefined>(undefined);\n\n // Always update optionsRef to latest\n optionsRef.current = options;\n\n // Clear any pending hide timer\n const clearHideTimer = () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n // Check if current options are empty\n const isEmpty = isEmptyOptions(options);\n\n // Extract values only when options are not empty\n const isLoading = isEmpty ? false : options.isLoading;\n const isDismissable = isEmpty ? false : !!options.isDismissable;\n const currentTheme = isEmpty ? undefined : options.theme;\n const currentTitle = isEmpty ? undefined : getStringValue(options.title);\n const currentDescription = isEmpty\n ? undefined\n : getStringValue(options.description);\n\n const handleHide = useEvent(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n hiddenByUserRef.current = true;\n });\n\n useEffect(() => {\n const wasLoading = wasLoadingRef.current;\n const isFirstRender = isFirstRenderRef.current;\n const currentOptions = optionsRef.current;\n const currentIsEmpty = isEmptyOptions(currentOptions);\n\n // Handle empty options - immediately remove any existing toast\n if (currentIsEmpty) {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n\n // Reset loading gate so the next cycle requires isLoading again\n hasBeenLoadingRef.current = false;\n hiddenByUserRef.current = false;\n wasLoadingRef.current = null;\n isFirstRenderRef.current = false;\n prevThemeRef.current = undefined;\n prevTitleRef.current = undefined;\n prevDescriptionRef.current = undefined;\n return;\n }\n\n // From here, we know options is a valid ProgressToastOptions\n const {\n isLoading: currentIsLoading,\n isDismissable: _isDismissable,\n ...currentToastData\n } = currentOptions;\n\n // Check if meaningful data changed (only string values)\n const themeChanged = currentTheme !== prevThemeRef.current;\n const titleChanged = currentTitle !== prevTitleRef.current;\n const descriptionChanged =\n currentDescription !== prevDescriptionRef.current;\n const dataChanged = themeChanged || titleChanged || descriptionChanged;\n\n const hideAction =\n isDismissable && currentIsLoading ? (\n <ItemAction isSelected type=\"outline\" onPress={handleHide}>\n Hide\n </ItemAction>\n ) : null;\n\n const mergedActions = hideAction ? (\n <>\n {currentToastData.actions}\n {hideAction}\n </>\n ) : (\n currentToastData.actions\n );\n\n const toastData: ToastData = {\n title: undefined,\n description: undefined,\n theme: undefined,\n icon: undefined,\n itemProps: undefined,\n ...currentToastData,\n actions: mergedActions,\n isLoading: currentIsLoading,\n duration: null,\n };\n\n // Show a new toast or update an existing one in-place (no exit/enter animation).\n const showToast = () => {\n if (toastIdRef.current != null) {\n updateToast(toastIdRef.current, toastData);\n } else {\n toastIdRef.current = addToast(toastData, true);\n }\n };\n\n // Show/update toast and schedule removal after RESULT_DURATION.\n const showToastWithTimer = () => {\n showToast();\n\n hideTimerRef.current = setTimeout(() => {\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }, RESULT_DURATION);\n };\n\n if (currentIsLoading) {\n // Starting or continuing loading\n hasBeenLoadingRef.current = true;\n clearHideTimer();\n\n if (hiddenByUserRef.current) {\n // User dismissed the loading toast; don't re-show during this loading cycle.\n } else if (toastIdRef.current == null) {\n // Create new toast\n showToast();\n } else if (dataChanged) {\n // Toast exists but data changed (e.g., switching back to loading from another state)\n showToast();\n }\n } else if (wasLoading === true && !currentIsLoading) {\n // Transitioning from loading to not loading\n hiddenByUserRef.current = false;\n clearHideTimer();\n\n if (currentTitle) {\n // Show result toast with timer\n showToastWithTimer();\n } else {\n // No content - just remove the loading toast immediately\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n } else if (\n !currentIsLoading &&\n !isFirstRender &&\n hasBeenLoadingRef.current &&\n dataChanged &&\n toastIdRef.current != null\n ) {\n // Not loading, data changed while toast is still visible — update it.\n if (currentTitle) {\n clearHideTimer();\n showToastWithTimer();\n } else {\n clearHideTimer();\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n }\n\n // Update refs for next comparison\n wasLoadingRef.current = currentIsLoading;\n isFirstRenderRef.current = false;\n prevThemeRef.current = currentTheme;\n prevTitleRef.current = currentTitle;\n prevDescriptionRef.current = currentDescription;\n }, [\n isEmpty,\n isLoading,\n isDismissable,\n currentTheme,\n currentTitle,\n currentDescription,\n addToast,\n removeToast,\n updateToast,\n handleHide,\n ]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n clearHideTimer();\n\n if (toastIdRef.current != null) {\n removeToast(toastIdRef.current);\n toastIdRef.current = null;\n }\n };\n }, [removeToast]);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { CheckIcon } from "../../../icons/CheckIcon.js";
3
3
  import { DangerIcon } from "../../../icons/DangerIcon.js";
4
4
  import { InfoCircleIcon } from "../../../icons/InfoCircleIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
4
4
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { _Tooltip } from "./Tooltip.js";
3
3
  import { TooltipTrigger } from "./TooltipTrigger.js";
4
4
  import { isValidElement, useEffect, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { TooltipContext } from "./context.js";
3
3
  import { Block } from "../../Block.js";
4
4
  import { _ActiveZone } from "../../content/ActiveZone/ActiveZone.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import React from "react";
3
3
 
4
4
  //#region src/components/overlays/Tooltip/context.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { usePortal } from "./usePortal.js";
3
3
  import { Fragment, jsx } from "react/jsx-runtime";
4
4
  import { createPortal } from "react-dom";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/portal/PortalProvider.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { usePortalContext } from "./PortalProvider.js";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import invariant from "tiny-invariant";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useCallback, useEffect, useMemo, useRef } from "react";
4
4
  import { ListDropTargetDelegate, ListKeyboardDelegate, mergeProps, useDraggableCollection, useDroppableCollection } from "react-aria";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { WarningIcon } from "../../icons/WarningIcon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { CheckIcon } from "../../icons/CheckIcon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,6 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { Block } from "../../Block.js";
3
- import { useI18n } from "../../../i18n/useI18n.js";
4
3
  import { tasty } from "@tenphi/tasty";
5
4
  import { jsx, jsxs } from "react/jsx-runtime";
6
5
 
@@ -125,11 +124,10 @@ const SIZE_MAP = {
125
124
  large: 96
126
125
  };
127
126
  function LoadingAnimation({ size = "medium", ...props }) {
128
- const { t } = useI18n();
129
127
  const numSize = SIZE_MAP[size] || size || SIZE_MAP.medium;
130
128
  return /* @__PURE__ */ jsxs(Block, {
131
129
  role: "img",
132
- "aria-label": t("loadingAnimation.ariaLabel", "Loading animation"),
130
+ "aria-label": "Loading animation",
133
131
  width: numSize,
134
132
  height: numSize * 1.1388888889,
135
133
  style: { position: "relative" },
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingAnimation.js","names":[],"sources":["../../../../src/components/status/LoadingAnimation/LoadingAnimation.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { CSSProperties } from 'react';\n\nimport { useI18n } from '../../../i18n';\nimport { Block, CubeBlockProps } from '../../Block';\n\nconst CubeElement = tasty({\n as: 'svg',\n styles: {\n display: 'block',\n position: 'absolute',\n width: '50%',\n height: '50%',\n\n // The three visible faces of the cube get their colors via the SVG\n // `fill=\"…\"` attribute on each `<path>` (see the JSX below), NOT via a\n // tasty `fill` style. Tasty's `fill` is a typed shorthand for\n // `background-color` — applying it to an SVG `<path>` would inject\n // `background-color: …` which paths simply ignore (this was the\n // \"invisible cube\" bug). Pointing the SVG `fill` attribute at the\n // adaptive `--loading-face-N-color` CSS variables published by Glaze\n // (defined in `src/tokens/palette.ts`) keeps the three faces driven by\n // the design system without going through a style property tasty would\n // re-route to the wrong CSS slot.\n\n animationName: {\n '': 'none',\n 'index=0': 'dice0',\n 'index=1': 'dice1',\n 'index=2': 'dice2',\n },\n animationDuration: {\n '': '0s',\n 'index=0 | index=1 | index=2': '2s',\n },\n animationIterationCount: {\n '': 1,\n 'index=0 | index=1 | index=2': 'infinite',\n },\n animationTimingFunction: {\n '': 'ease',\n 'index=0 | index=1 | index=2': 'ease',\n },\n zIndex: {\n '': 0,\n 'index=0 | index=1 | index=2': 0,\n },\n\n '@keyframes': {\n dice0: {\n from: { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n '25%': { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n '50%': { transform: 'translate(0%, 25%)', zIndex: 0 },\n '51%': { zIndex: 1 },\n '75%': { zIndex: 1 },\n to: { transform: 'translate(0%, 25%)', zIndex: 1 },\n },\n dice1: {\n from: { transform: 'translate(0%, 25%)', zIndex: 3 },\n '25%': { transform: 'translate(49%, 49%)', zIndex: 3 },\n '75%': { transform: 'translate(49%, 49%)', zIndex: 2 },\n to: { transform: 'translate(98%, 25%)', zIndex: 1 },\n },\n dice2: {\n from: { transform: 'translate(98%, 25%)', zIndex: 1 },\n '50%': { transform: 'translate(98%, 25%)', zIndex: 0 },\n '75%': { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n to: { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n },\n },\n },\n});\n\ninterface CubeProps {\n index?: 0 | 1 | 2;\n style?: CSSProperties;\n}\n\nfunction Cube({ index, style }: CubeProps) {\n return (\n <CubeElement\n mods={index != null ? { index } : undefined}\n style={style}\n viewBox=\"0 0 36 41\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <path\n fill=\"var(--loading-face-1-color)\"\n d=\"M35.899 10.351l-18 10.25L.1 10.25l18-10.25L35.9 10.351z\"\n />\n <path\n fill=\"var(--loading-face-2-color)\"\n d=\"M18 41L0 30.75l.101-20.5L18 20.5\"\n />\n <path\n fill=\"var(--loading-face-3-color)\"\n d=\"M36 30.75L18 41V20.6l17.899-10.25L36 30.75z\"\n />\n </CubeElement>\n );\n}\n\nconst SIZE_MAP = {\n small: 32,\n medium: 64,\n large: 96,\n};\n\nexport interface CubeLoadingAnimationProps extends CubeBlockProps {\n size?: 'small' | 'medium' | 'large' | number;\n}\n\nexport function LoadingAnimation({\n size = 'medium',\n ...props\n}: CubeLoadingAnimationProps) {\n const { t } = useI18n();\n const numSize: number = SIZE_MAP[size] || size || SIZE_MAP.medium;\n\n return (\n <Block\n role=\"img\"\n aria-label={t('loadingAnimation.ariaLabel', 'Loading animation')}\n width={numSize}\n height={numSize * 1.1388888889}\n style={{ position: 'relative' }}\n {...props}\n >\n <Cube style={{ transform: 'translate(0%, 72.5%)' }} />\n <Cube style={{ transform: 'translate(98%, 72.5%)' }} />\n <Cube style={{ transform: 'translate(49%, 96.5%)' }} />\n <Cube index={0} />\n <Cube index={1} />\n <Cube index={2} />\n </Block>\n );\n}\n"],"mappings":";;;;;;;AAMA,MAAM,cAAc,MAAM;CACxB,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACP,QAAQ;EAaR,eAAe;GACb,IAAI;GACJ,WAAW;GACX,WAAW;GACX,WAAW;GACZ;EACD,mBAAmB;GACjB,IAAI;GACJ,+BAA+B;GAChC;EACD,yBAAyB;GACvB,IAAI;GACJ,+BAA+B;GAChC;EACD,yBAAyB;GACvB,IAAI;GACJ,+BAA+B;GAChC;EACD,QAAQ;GACN,IAAI;GACJ,+BAA+B;GAChC;EAED,cAAc;GACZ,OAAO;IACL,MAAM;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACtD,OAAO;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACvD,OAAO;KAAE,WAAW;KAAsB,QAAQ;KAAG;IACrD,OAAO,EAAE,QAAQ,GAAG;IACpB,OAAO,EAAE,QAAQ,GAAG;IACpB,IAAI;KAAE,WAAW;KAAsB,QAAQ;KAAG;IACnD;GACD,OAAO;IACL,MAAM;KAAE,WAAW;KAAsB,QAAQ;KAAG;IACpD,OAAO;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACtD,OAAO;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACtD,IAAI;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACpD;GACD,OAAO;IACL,MAAM;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACrD,OAAO;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACtD,OAAO;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACvD,IAAI;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACrD;GACF;EACF;CACF,CAAC;AAOF,SAAS,KAAK,EAAE,OAAO,SAAoB;AACzC,QACE,qBAAC;EACC,MAAM,SAAS,OAAO,EAAE,OAAO,GAAG;EAC3B;EACP,SAAQ;EACR,MAAK;EACL,OAAM;EACN,MAAK;EACL,eAAY;;GAEZ,oBAAC;IACC,MAAK;IACL,GAAE;KACF;GACF,oBAAC;IACC,MAAK;IACL,GAAE;KACF;GACF,oBAAC;IACC,MAAK;IACL,GAAE;KACF;;GACU;;AAIlB,MAAM,WAAW;CACf,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAMD,SAAgB,iBAAiB,EAC/B,OAAO,UACP,GAAG,SACyB;CAC5B,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,UAAkB,SAAS,SAAS,QAAQ,SAAS;AAE3D,QACE,qBAAC;EACC,MAAK;EACL,cAAY,EAAE,8BAA8B,oBAAoB;EAChE,OAAO;EACP,QAAQ,UAAU;EAClB,OAAO,EAAE,UAAU,YAAY;EAC/B,GAAI;;GAEJ,oBAAC,QAAK,OAAO,EAAE,WAAW,wBAAwB,GAAI;GACtD,oBAAC,QAAK,OAAO,EAAE,WAAW,yBAAyB,GAAI;GACvD,oBAAC,QAAK,OAAO,EAAE,WAAW,yBAAyB,GAAI;GACvD,oBAAC,QAAK,OAAO,IAAK;GAClB,oBAAC,QAAK,OAAO,IAAK;GAClB,oBAAC,QAAK,OAAO,IAAK;;GACZ"}
1
+ {"version":3,"file":"LoadingAnimation.js","names":[],"sources":["../../../../src/components/status/LoadingAnimation/LoadingAnimation.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { CSSProperties } from 'react';\n\nimport { Block, CubeBlockProps } from '../../Block';\n\nconst CubeElement = tasty({\n as: 'svg',\n styles: {\n display: 'block',\n position: 'absolute',\n width: '50%',\n height: '50%',\n\n // The three visible faces of the cube get their colors via the SVG\n // `fill=\"…\"` attribute on each `<path>` (see the JSX below), NOT via a\n // tasty `fill` style. Tasty's `fill` is a typed shorthand for\n // `background-color` — applying it to an SVG `<path>` would inject\n // `background-color: …` which paths simply ignore (this was the\n // \"invisible cube\" bug). Pointing the SVG `fill` attribute at the\n // adaptive `--loading-face-N-color` CSS variables published by Glaze\n // (defined in `src/tokens/palette.ts`) keeps the three faces driven by\n // the design system without going through a style property tasty would\n // re-route to the wrong CSS slot.\n\n animationName: {\n '': 'none',\n 'index=0': 'dice0',\n 'index=1': 'dice1',\n 'index=2': 'dice2',\n },\n animationDuration: {\n '': '0s',\n 'index=0 | index=1 | index=2': '2s',\n },\n animationIterationCount: {\n '': 1,\n 'index=0 | index=1 | index=2': 'infinite',\n },\n animationTimingFunction: {\n '': 'ease',\n 'index=0 | index=1 | index=2': 'ease',\n },\n zIndex: {\n '': 0,\n 'index=0 | index=1 | index=2': 0,\n },\n\n '@keyframes': {\n dice0: {\n from: { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n '25%': { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n '50%': { transform: 'translate(0%, 25%)', zIndex: 0 },\n '51%': { zIndex: 1 },\n '75%': { zIndex: 1 },\n to: { transform: 'translate(0%, 25%)', zIndex: 1 },\n },\n dice1: {\n from: { transform: 'translate(0%, 25%)', zIndex: 3 },\n '25%': { transform: 'translate(49%, 49%)', zIndex: 3 },\n '75%': { transform: 'translate(49%, 49%)', zIndex: 2 },\n to: { transform: 'translate(98%, 25%)', zIndex: 1 },\n },\n dice2: {\n from: { transform: 'translate(98%, 25%)', zIndex: 1 },\n '50%': { transform: 'translate(98%, 25%)', zIndex: 0 },\n '75%': { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n to: { transform: 'translate(49%, 0.5%)', zIndex: 0 },\n },\n },\n },\n});\n\ninterface CubeProps {\n index?: 0 | 1 | 2;\n style?: CSSProperties;\n}\n\nfunction Cube({ index, style }: CubeProps) {\n return (\n <CubeElement\n mods={index != null ? { index } : undefined}\n style={style}\n viewBox=\"0 0 36 41\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <path\n fill=\"var(--loading-face-1-color)\"\n d=\"M35.899 10.351l-18 10.25L.1 10.25l18-10.25L35.9 10.351z\"\n />\n <path\n fill=\"var(--loading-face-2-color)\"\n d=\"M18 41L0 30.75l.101-20.5L18 20.5\"\n />\n <path\n fill=\"var(--loading-face-3-color)\"\n d=\"M36 30.75L18 41V20.6l17.899-10.25L36 30.75z\"\n />\n </CubeElement>\n );\n}\n\nconst SIZE_MAP = {\n small: 32,\n medium: 64,\n large: 96,\n};\n\nexport interface CubeLoadingAnimationProps extends CubeBlockProps {\n size?: 'small' | 'medium' | 'large' | number;\n}\n\nexport function LoadingAnimation({\n size = 'medium',\n ...props\n}: CubeLoadingAnimationProps) {\n const numSize: number = SIZE_MAP[size] || size || SIZE_MAP.medium;\n\n return (\n <Block\n role=\"img\"\n aria-label=\"Loading animation\"\n width={numSize}\n height={numSize * 1.1388888889}\n style={{ position: 'relative' }}\n {...props}\n >\n <Cube style={{ transform: 'translate(0%, 72.5%)' }} />\n <Cube style={{ transform: 'translate(98%, 72.5%)' }} />\n <Cube style={{ transform: 'translate(49%, 96.5%)' }} />\n <Cube index={0} />\n <Cube index={1} />\n <Cube index={2} />\n </Block>\n );\n}\n"],"mappings":";;;;;;AAKA,MAAM,cAAc,MAAM;CACxB,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACP,QAAQ;EAaR,eAAe;GACb,IAAI;GACJ,WAAW;GACX,WAAW;GACX,WAAW;GACZ;EACD,mBAAmB;GACjB,IAAI;GACJ,+BAA+B;GAChC;EACD,yBAAyB;GACvB,IAAI;GACJ,+BAA+B;GAChC;EACD,yBAAyB;GACvB,IAAI;GACJ,+BAA+B;GAChC;EACD,QAAQ;GACN,IAAI;GACJ,+BAA+B;GAChC;EAED,cAAc;GACZ,OAAO;IACL,MAAM;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACtD,OAAO;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACvD,OAAO;KAAE,WAAW;KAAsB,QAAQ;KAAG;IACrD,OAAO,EAAE,QAAQ,GAAG;IACpB,OAAO,EAAE,QAAQ,GAAG;IACpB,IAAI;KAAE,WAAW;KAAsB,QAAQ;KAAG;IACnD;GACD,OAAO;IACL,MAAM;KAAE,WAAW;KAAsB,QAAQ;KAAG;IACpD,OAAO;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACtD,OAAO;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACtD,IAAI;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACpD;GACD,OAAO;IACL,MAAM;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACrD,OAAO;KAAE,WAAW;KAAuB,QAAQ;KAAG;IACtD,OAAO;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACvD,IAAI;KAAE,WAAW;KAAwB,QAAQ;KAAG;IACrD;GACF;EACF;CACF,CAAC;AAOF,SAAS,KAAK,EAAE,OAAO,SAAoB;AACzC,QACE,qBAAC;EACC,MAAM,SAAS,OAAO,EAAE,OAAO,GAAG;EAC3B;EACP,SAAQ;EACR,MAAK;EACL,OAAM;EACN,MAAK;EACL,eAAY;;GAEZ,oBAAC;IACC,MAAK;IACL,GAAE;KACF;GACF,oBAAC;IACC,MAAK;IACL,GAAE;KACF;GACF,oBAAC;IACC,MAAK;IACL,GAAE;KACF;;GACU;;AAIlB,MAAM,WAAW;CACf,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAMD,SAAgB,iBAAiB,EAC/B,OAAO,UACP,GAAG,SACyB;CAC5B,MAAM,UAAkB,SAAS,SAAS,QAAQ,SAAS;AAE3D,QACE,qBAAC;EACC,MAAK;EACL,cAAW;EACX,OAAO;EACP,QAAQ,UAAU;EAClB,OAAO,EAAE,UAAU,YAAY;EAC/B,GAAI;;GAEJ,oBAAC,QAAK,OAAO,EAAE,WAAW,wBAAwB,GAAI;GACtD,oBAAC,QAAK,OAAO,EAAE,WAAW,yBAAyB,GAAI;GACvD,oBAAC,QAAK,OAAO,EAAE,WAAW,yBAAyB,GAAI;GACvD,oBAAC,QAAK,OAAO,IAAK;GAClB,oBAAC,QAAK,OAAO,IAAK;GAClB,oBAAC,QAAK,OAAO,IAAK;;GACZ"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
  import { memo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { Cube } from "./Cube.js";
3
3
  import { SpinsContainer } from "./SpinsContainer.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { Block } from "../../Block.js";
3
3
  import { InternalSpinner } from "./InternalSpinner.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  //#region src/data/item-themes.ts
3
3
  const VALIDATION_STYLES = { border: {
4
4
  invalid: "#danger-accent-text",
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  //#region src/data/themes.ts
3
3
  var themes_default = {
4
4
  special: {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconSparkles } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconChartArea } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconChevronsLeft } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconChartBar } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconBellFilled } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconBell } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconCaretDownFilled } from "@tabler/icons-react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-6be6cbe | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7ec55ba | Cube Dev Team */
2
2
  import { wrapIcon } from "./wrap-icon.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { IconCaretUpFilled } from "@tabler/icons-react";