@cube-dev/ui-kit 0.0.0-canary-35a6e75 → 0.0.0-canary-4c811db

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 (572) hide show
  1. package/dist/CHANGELOG.md +14 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-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 +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/actions-run.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.d.ts +2 -1
  59. package/dist/components/content/Item/Item.js +38 -32
  60. package/dist/components/content/Item/Item.js.map +1 -1
  61. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  62. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  63. package/dist/components/content/Layout/GridLayout.js +1 -1
  64. package/dist/components/content/Layout/Layout.js +1 -1
  65. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  66. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  67. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  68. package/dist/components/content/Layout/LayoutContent.js +1 -1
  69. package/dist/components/content/Layout/LayoutContext.js +1 -1
  70. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  71. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  72. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  73. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutPane.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  78. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  79. package/dist/components/content/Layout/index.js +1 -1
  80. package/dist/components/content/Layout/utils.js +1 -1
  81. package/dist/components/content/Paragraph.js +1 -1
  82. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  83. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  84. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  85. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  86. package/dist/components/content/Result/Result.js +1 -1
  87. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  88. package/dist/components/content/Tag/Tag.js +1 -1
  89. package/dist/components/content/Text.d.ts +28 -28
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/styled.js +1 -1
  96. package/dist/components/content/Tree/tree-index.js +1 -1
  97. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  98. package/dist/components/content/Tree/use-load-data.js +1 -1
  99. package/dist/components/content/highlightText.js +1 -1
  100. package/dist/components/content/use-auto-tooltip.js +192 -132
  101. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  102. package/dist/components/data/DataTable/DataTable.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  108. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  109. package/dist/components/data/TableBase/RowCollection.js +1 -1
  110. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  111. package/dist/components/data/TableBase/TableRow.js +1 -1
  112. package/dist/components/data/TableBase/TableView.js +1 -1
  113. package/dist/components/data/TableBase/column-menu.js +1 -1
  114. package/dist/components/data/TableBase/column-styles.js +1 -1
  115. package/dist/components/data/TableBase/column-tint.js +1 -1
  116. package/dist/components/data/TableBase/row-menu.js +1 -1
  117. package/dist/components/data/TableBase/styled.js +1 -1
  118. package/dist/components/data/TableBase/table-tree.js +1 -1
  119. package/dist/components/data/TableBase/types.js +1 -1
  120. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  121. package/dist/components/data/TableBase/use-column-order.js +1 -1
  122. package/dist/components/data/TableBase/use-container-width.js +1 -1
  123. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  124. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  125. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  126. package/dist/components/data/TableBase/use-table-search.js +1 -1
  127. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  128. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  129. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  130. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  131. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  132. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  133. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  134. package/dist/components/fields/Checkbox/context.js +1 -1
  135. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  136. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  137. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  138. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  139. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  140. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  141. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  142. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  143. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  144. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  145. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  146. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  147. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  148. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  149. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  150. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  151. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  152. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  153. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  154. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  155. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  156. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  157. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  158. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  159. package/dist/components/fields/DatePicker/period.js +1 -1
  160. package/dist/components/fields/DatePicker/props.js +1 -1
  161. package/dist/components/fields/DatePicker/utils.js +1 -1
  162. package/dist/components/fields/FileInput/FileInput.js +1 -1
  163. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  164. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  165. package/dist/components/fields/Input/Input.js +1 -1
  166. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  167. package/dist/components/fields/ListBox/ListBox.js +1 -1
  168. package/dist/components/fields/ListBox/optionId.js +1 -1
  169. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  170. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  171. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  172. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  173. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  174. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  175. package/dist/components/fields/Picker/Picker.js +1 -1
  176. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  177. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  178. package/dist/components/fields/RadioGroup/context.js +1 -1
  179. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  180. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  181. package/dist/components/fields/Select/Select.js +1 -1
  182. package/dist/components/fields/Slider/Gradation.js +1 -1
  183. package/dist/components/fields/Slider/HueSlider.js +1 -1
  184. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  185. package/dist/components/fields/Slider/Slider.js +1 -1
  186. package/dist/components/fields/Slider/SliderBase.js +1 -1
  187. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  188. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  189. package/dist/components/fields/Slider/elements.js +1 -1
  190. package/dist/components/fields/Slider/index.js +1 -1
  191. package/dist/components/fields/Switch/Switch.js +1 -1
  192. package/dist/components/fields/TagInput/TagInput.js +1 -1
  193. package/dist/components/fields/TagInput/TagList.js +1 -1
  194. package/dist/components/fields/TextArea/TextArea.js +1 -1
  195. package/dist/components/fields/TextInput/TextInput.js +1 -1
  196. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  197. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  198. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  199. package/dist/components/fields/TriggerActions.js +1 -1
  200. package/dist/components/fields/color/ColorPanel.js +1 -1
  201. package/dist/components/fields/color/channels.js +1 -1
  202. package/dist/components/fields/color/color.js +1 -1
  203. package/dist/components/fields/color/context.js +1 -1
  204. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  205. package/dist/components/form/Form/Field.js +1 -1
  206. package/dist/components/form/Form/Form.js +1 -1
  207. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  208. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  209. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  210. package/dist/components/form/Form/SubmitError.js +1 -1
  211. package/dist/components/form/Form/backend.js +1 -1
  212. package/dist/components/form/Form/index.js +1 -1
  213. package/dist/components/form/Form/modern/actions.js +1 -1
  214. package/dist/components/form/Form/modern/context.js +1 -1
  215. package/dist/components/form/Form/modern/controller.js +1 -1
  216. package/dist/components/form/Form/modern/field-binding.js +1 -1
  217. package/dist/components/form/Form/modern/field.js +1 -1
  218. package/dist/components/form/Form/modern/react.js +1 -1
  219. package/dist/components/form/Form/modern/store.js +1 -1
  220. package/dist/components/form/Form/modern/validation.js +1 -1
  221. package/dist/components/form/Form/modern/values.js +1 -1
  222. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  223. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  224. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  225. package/dist/components/form/Form/use-field/use-field.js +1 -1
  226. package/dist/components/form/Form/use-form.js +1 -1
  227. package/dist/components/form/Form/validation.js +1 -1
  228. package/dist/components/form/Label.js +1 -1
  229. package/dist/components/form/legacy-tooltip.js +1 -1
  230. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  231. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  232. package/dist/components/form/validation/use-validation-props.js +1 -1
  233. package/dist/components/form/wrapper.js +1 -1
  234. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  235. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  236. package/dist/components/layout/Board/Board.js +1 -1
  237. package/dist/components/layout/Board/BoardProvider.js +1 -1
  238. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  239. package/dist/components/layout/Board/Widget.js +1 -1
  240. package/dist/components/layout/Board/WidgetHost.js +1 -1
  241. package/dist/components/layout/Board/board-context.js +1 -1
  242. package/dist/components/layout/Board/board-store.js +1 -1
  243. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  244. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  245. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  246. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  247. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  248. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  249. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  250. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  251. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  252. package/dist/components/layout/Board/index.js +1 -1
  253. package/dist/components/layout/Board/responsive-utils.js +1 -1
  254. package/dist/components/layout/Board/use-board-layout.js +1 -1
  255. package/dist/components/layout/Board/use-board-registry.js +1 -1
  256. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  257. package/dist/components/layout/Board/use-board-selection.js +1 -1
  258. package/dist/components/layout/Flex.js +1 -1
  259. package/dist/components/layout/Flow.js +1 -1
  260. package/dist/components/layout/Grid.js +1 -1
  261. package/dist/components/layout/Panel.js +1 -1
  262. package/dist/components/layout/Prefix.js +1 -1
  263. package/dist/components/layout/ResizablePanel.js +1 -1
  264. package/dist/components/layout/Space.js +1 -1
  265. package/dist/components/layout/Suffix.js +1 -1
  266. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  267. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  268. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  269. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  270. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  271. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  272. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  273. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  274. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  275. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  276. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  277. package/dist/components/navigation/Tabs/styled.js +1 -1
  278. package/dist/components/navigation/Tabs/types.js +1 -1
  279. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  280. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  281. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  282. package/dist/components/other/Calendar/Calendar.js +1 -1
  283. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  284. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  285. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  286. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  287. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  288. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  289. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  290. package/dist/components/other/Calendar/styled.js +1 -1
  291. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  292. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  293. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  294. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  295. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  296. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  297. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  298. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  299. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  300. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  301. package/dist/components/overlays/Dialog/context.js +1 -1
  302. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  303. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  304. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  305. package/dist/components/overlays/Modal/Modal.js +1 -1
  306. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  307. package/dist/components/overlays/Modal/Overlay.js +1 -1
  308. package/dist/components/overlays/Modal/Popover.js +1 -1
  309. package/dist/components/overlays/Modal/Tray.js +1 -1
  310. package/dist/components/overlays/Modal/Underlay.js +1 -1
  311. package/dist/components/overlays/Notifications/Notification.js +1 -1
  312. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  313. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  314. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  315. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  316. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  317. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  318. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  319. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  320. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  321. package/dist/components/overlays/Notifications/index.js +1 -1
  322. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  323. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  324. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  325. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  326. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  327. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  328. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  329. package/dist/components/overlays/Toast/index.js +1 -1
  330. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  331. package/dist/components/overlays/Toast/useToast.js +1 -1
  332. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  333. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  334. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  335. package/dist/components/overlays/Tooltip/context.js +1 -1
  336. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  337. package/dist/components/portal/Portal.js +1 -1
  338. package/dist/components/portal/PortalProvider.js +1 -1
  339. package/dist/components/portal/usePortal.js +1 -1
  340. package/dist/components/shared/DraggableCollection.js +1 -1
  341. package/dist/components/shared/InvalidIcon.js +1 -1
  342. package/dist/components/shared/ValidIcon.js +1 -1
  343. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  344. package/dist/components/status/Spin/Cube.js +1 -1
  345. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  346. package/dist/components/status/Spin/Spin.js +1 -1
  347. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  348. package/dist/data/item-themes.js +1 -1
  349. package/dist/data/themes.js +1 -1
  350. package/dist/eslint-plugin/defaults.generated.js +1 -1
  351. package/dist/eslint-plugin/index.js +1 -1
  352. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  353. package/dist/i18n/I18nProvider.js +1 -1
  354. package/dist/i18n/createFormatter.js +1 -1
  355. package/dist/i18n/index.js +1 -1
  356. package/dist/i18n/instance.js +1 -1
  357. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  358. package/dist/i18n/locales/en-US/uikit.js +1 -1
  359. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  360. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  361. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  362. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  363. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  364. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  365. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  366. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  367. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  368. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  369. package/dist/i18n/locales.js +1 -1
  370. package/dist/i18n/useFormatter.js +1 -1
  371. package/dist/i18n/useI18n.js +1 -1
  372. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  373. package/dist/icons/AdjustmentsIcon.js +1 -1
  374. package/dist/icons/AiIcon.js +1 -1
  375. package/dist/icons/AreaChartIcon.js +1 -1
  376. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  377. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  378. package/dist/icons/BackwardIcon.js +1 -1
  379. package/dist/icons/BarChartIcon.js +1 -1
  380. package/dist/icons/BellFilledIcon.js +1 -1
  381. package/dist/icons/BellIcon.js +1 -1
  382. package/dist/icons/BooleanIcon.js +1 -1
  383. package/dist/icons/CalendarEditIcon.js +1 -1
  384. package/dist/icons/CalendarIcon.js +1 -1
  385. package/dist/icons/CaretDownIcon.js +1 -1
  386. package/dist/icons/CaretUpIcon.js +1 -1
  387. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  388. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  389. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  390. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  391. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  392. package/dist/icons/ChartBarLineIcon.js +1 -1
  393. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  394. package/dist/icons/ChartBarStackedIcon.js +1 -1
  395. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  396. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  397. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  398. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  399. package/dist/icons/ChartBubbleIcon.js +1 -1
  400. package/dist/icons/ChartDonut2Icon.js +1 -1
  401. package/dist/icons/ChartFunnelIcon.js +1 -1
  402. package/dist/icons/ChartHeatmapIcon.js +1 -1
  403. package/dist/icons/ChartKPIIcon.js +1 -1
  404. package/dist/icons/ChartPie2Icon.js +1 -1
  405. package/dist/icons/ChartScatterIcon.js +1 -1
  406. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  407. package/dist/icons/CheckCircleIcon.js +1 -1
  408. package/dist/icons/CheckIcon.js +1 -1
  409. package/dist/icons/CircleFilledIcon.js +1 -1
  410. package/dist/icons/ClearIcon.js +1 -1
  411. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  412. package/dist/icons/CloseCircleIcon.js +1 -1
  413. package/dist/icons/CloseIcon.js +1 -1
  414. package/dist/icons/CodeIcon.js +1 -1
  415. package/dist/icons/ColumnTotalIcon.js +1 -1
  416. package/dist/icons/CopyIcon.js +1 -1
  417. package/dist/icons/CountIcon.js +1 -1
  418. package/dist/icons/CubeIcon.js +1 -1
  419. package/dist/icons/CubePauseIcon.js +1 -1
  420. package/dist/icons/CubePlayIcon.js +1 -1
  421. package/dist/icons/CurrencyDollarIcon.js +1 -1
  422. package/dist/icons/DangerIcon.js +1 -1
  423. package/dist/icons/DashboardIcon.js +1 -1
  424. package/dist/icons/DatabaseIcon.js +1 -1
  425. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  426. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  427. package/dist/icons/DirectionIcon.js +1 -1
  428. package/dist/icons/DonutIcon.js +1 -1
  429. package/dist/icons/DownIcon.js +1 -1
  430. package/dist/icons/EditIcon.js +1 -1
  431. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  432. package/dist/icons/ExclamationCircleIcon.js +1 -1
  433. package/dist/icons/ExclamationIcon.js +1 -1
  434. package/dist/icons/EyeIcon.js +1 -1
  435. package/dist/icons/EyeInvisibleIcon.js +1 -1
  436. package/dist/icons/FilterIcon.js +1 -1
  437. package/dist/icons/FolderFilledIcon.js +1 -1
  438. package/dist/icons/FolderIcon.js +1 -1
  439. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  440. package/dist/icons/FolderOpenIcon.js +1 -1
  441. package/dist/icons/ForwardIcon.js +1 -1
  442. package/dist/icons/GripVerticalIcon.js +1 -1
  443. package/dist/icons/HierarchyIcon.js +1 -1
  444. package/dist/icons/HierarchyOpenIcon.js +1 -1
  445. package/dist/icons/Icon.js +1 -1
  446. package/dist/icons/InfoCircleIcon.js +1 -1
  447. package/dist/icons/InfoIcon.js +1 -1
  448. package/dist/icons/KeyIcon.js +1 -1
  449. package/dist/icons/LeftIcon.js +1 -1
  450. package/dist/icons/LineChartIcon.js +1 -1
  451. package/dist/icons/LoadingIcon.js +1 -1
  452. package/dist/icons/LockFilledIcon.js +1 -1
  453. package/dist/icons/LockIcon.js +1 -1
  454. package/dist/icons/MoreIcon.js +1 -1
  455. package/dist/icons/NotAllowedIcon.js +1 -1
  456. package/dist/icons/Number123Icon.js +1 -1
  457. package/dist/icons/NumberIcon.js +1 -1
  458. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  459. package/dist/icons/PauseCircleIcon.js +1 -1
  460. package/dist/icons/PauseIcon.js +1 -1
  461. package/dist/icons/PercentageIcon.js +1 -1
  462. package/dist/icons/PieChartIcon.js +1 -1
  463. package/dist/icons/PipetteIcon.js +1 -1
  464. package/dist/icons/PlayCircleIcon.js +1 -1
  465. package/dist/icons/PlayIcon.js +1 -1
  466. package/dist/icons/PlusIcon.js +1 -1
  467. package/dist/icons/ProgressBarIcon.js +1 -1
  468. package/dist/icons/ReloadIcon.js +1 -1
  469. package/dist/icons/ReportIcon.js +1 -1
  470. package/dist/icons/ReturnIcon.js +1 -1
  471. package/dist/icons/RightIcon.js +1 -1
  472. package/dist/icons/RowTotalsIcon.js +1 -1
  473. package/dist/icons/SchemeIcon.js +1 -1
  474. package/dist/icons/SearchIcon.js +1 -1
  475. package/dist/icons/SemanticQueryIcon.js +1 -1
  476. package/dist/icons/SettingsIcon.js +1 -1
  477. package/dist/icons/ShieldFilledIcon.js +1 -1
  478. package/dist/icons/ShieldIcon.js +1 -1
  479. package/dist/icons/SlashIcon.js +1 -1
  480. package/dist/icons/SparklesIcon.js +1 -1
  481. package/dist/icons/SqlIcon.js +1 -1
  482. package/dist/icons/StatsIcon.js +1 -1
  483. package/dist/icons/StopIcon.js +1 -1
  484. package/dist/icons/StringIcon.js +1 -1
  485. package/dist/icons/SubtotalsIcon.js +1 -1
  486. package/dist/icons/SwitchIcon.js +1 -1
  487. package/dist/icons/TableIcon.js +1 -1
  488. package/dist/icons/ThumbsDownIcon.js +1 -1
  489. package/dist/icons/ThumbsUpIcon.js +1 -1
  490. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  491. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  492. package/dist/icons/ThunderboltIcon.js +1 -1
  493. package/dist/icons/TimeIcon.js +1 -1
  494. package/dist/icons/TrashIcon.js +1 -1
  495. package/dist/icons/UnlockIcon.js +1 -1
  496. package/dist/icons/UpIcon.js +1 -1
  497. package/dist/icons/UserGroupIcon.js +1 -1
  498. package/dist/icons/UserIcon.js +1 -1
  499. package/dist/icons/UserLockIcon.js +1 -1
  500. package/dist/icons/ViewIcon.js +1 -1
  501. package/dist/icons/WarningFilledIcon.js +1 -1
  502. package/dist/icons/WarningIcon.js +1 -1
  503. package/dist/icons/wrap-icon.js +1 -1
  504. package/dist/index.js +1 -1
  505. package/dist/probe/canonicalize.js +1 -1
  506. package/dist/probe/css.js +1 -1
  507. package/dist/probe/index.js +1 -1
  508. package/dist/provider.js +1 -1
  509. package/dist/providers/TrackingProvider.js +1 -1
  510. package/dist/providers/navigationAdapter.default.js +1 -1
  511. package/dist/tokens/all-tokens.js +1 -1
  512. package/dist/tokens/base.js +1 -1
  513. package/dist/tokens/color-seed.js +1 -1
  514. package/dist/tokens/color-theme.js +1 -1
  515. package/dist/tokens/colors.js +1 -1
  516. package/dist/tokens/layout.js +1 -1
  517. package/dist/tokens/lazy-styles.js +1 -1
  518. package/dist/tokens/legacy-color.js +1 -1
  519. package/dist/tokens/palette-config.js +1 -1
  520. package/dist/tokens/palette.js +1 -1
  521. package/dist/tokens/resolve.js +1 -1
  522. package/dist/tokens/shadows.js +1 -1
  523. package/dist/tokens/sizes.js +1 -1
  524. package/dist/tokens/spacing.js +1 -1
  525. package/dist/tokens/typography.js +1 -1
  526. package/dist/utils/ResizeSensor.js +1 -1
  527. package/dist/utils/colors.js +1 -1
  528. package/dist/utils/dotize.js +1 -1
  529. package/dist/utils/is-dev-env.js +1 -1
  530. package/dist/utils/modules.js +1 -1
  531. package/dist/utils/promise.js +1 -1
  532. package/dist/utils/raf.js +1 -1
  533. package/dist/utils/random.js +1 -1
  534. package/dist/utils/range.js +1 -1
  535. package/dist/utils/react/RenderCache.js +1 -1
  536. package/dist/utils/react/Slots.js +1 -1
  537. package/dist/utils/react/chain.js +1 -1
  538. package/dist/utils/react/disabledProps.js +1 -1
  539. package/dist/utils/react/escapePropagation.js +1 -1
  540. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  541. package/dist/utils/react/index.js +1 -1
  542. package/dist/utils/react/interactions.js +1 -1
  543. package/dist/utils/react/isTextOnly.js +1 -1
  544. package/dist/utils/react/mapProps.js +1 -1
  545. package/dist/utils/react/mergeProps.js +1 -1
  546. package/dist/utils/react/nullableValue.js +1 -1
  547. package/dist/utils/react/programmaticFocus.js +1 -1
  548. package/dist/utils/react/resolveIcon.js +1 -1
  549. package/dist/utils/react/sharedStore.js +1 -1
  550. package/dist/utils/react/useBufferedValue.js +1 -1
  551. package/dist/utils/react/useCombinedRefs.js +1 -1
  552. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  553. package/dist/utils/react/useEventBus.js +1 -1
  554. package/dist/utils/react/useId.js +1 -1
  555. package/dist/utils/react/useIsDarwin.js +1 -1
  556. package/dist/utils/react/useKeySymbols.js +1 -1
  557. package/dist/utils/react/useLayoutEffect.js +1 -1
  558. package/dist/utils/react/useLocalStorage.js +1 -1
  559. package/dist/utils/react/useMergeStyles.js +1 -1
  560. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  561. package/dist/utils/react/usePopoverSync.js +1 -1
  562. package/dist/utils/react/useQaProps.js +1 -1
  563. package/dist/utils/react/useScheme.js +1 -1
  564. package/dist/utils/react/useViewportSize.js +1 -1
  565. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  566. package/dist/utils/selection.js +1 -1
  567. package/dist/utils/styles.js +1 -1
  568. package/dist/utils/tree.js +1 -1
  569. package/dist/utils/warnings.js +1 -1
  570. package/dist/version.js +2 -2
  571. package/docs/components/content/Item.md +7 -2
  572. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useSlotProps } from "../../utils/react/Slots.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { TEXT_PROP_MAP, _Text } from "../Text.js";
4
4
  import { highlightText } from "../highlightText.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useSlotProps } from "../../utils/react/Slots.js";
4
4
  import { TEXT_PROP_MAP } from "./Text.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { _Item } from "../Item/Item.js";
3
3
  import { Action } from "../../actions/Action/Action.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  //#region src/components/content/Tree/tree-index.ts
3
3
  function buildTreeIndex(treeData) {
4
4
  const byKey = /* @__PURE__ */ new Map();
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { isDevEnvOrTest } from "../../../utils/is-dev-env.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { _Text } from "./Text.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,8 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { TooltipProvider } from "../overlays/Tooltip/TooltipProvider.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { useEffect, useRef, useState } from "react";
5
- import { jsx } from "react/jsx-runtime";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { flushSync } from "react-dom";
7
7
 
8
8
  //#region src/components/content/use-auto-tooltip.tsx
@@ -35,11 +35,11 @@ function queueOverflowCheck(check) {
35
35
  pendingOverflowChecks.add(check);
36
36
  }
37
37
  /**
38
- * Whether the tooltip detects label overflow on its own. Overflow detection
39
- * measures text, so it needs a string label.
38
+ * Whether the tooltip value asks to detect overflow on its own. What it
39
+ * measures is decided separately: overflow detection measures text, so only a
40
+ * string label or description takes part.
40
41
  */
41
- function isAutoTooltip(tooltip, children) {
42
- if (typeof children !== "string") return false;
42
+ function allowsAutoTooltip(tooltip) {
43
43
  if (tooltip === true) return true;
44
44
  if (typeof tooltip === "object") {
45
45
  if (tooltip.title) return tooltip.auto === true;
@@ -48,161 +48,219 @@ function isAutoTooltip(tooltip, children) {
48
48
  return false;
49
49
  }
50
50
  /**
51
+ * What the auto tooltip shows: the label, then a string description on a line
52
+ * of its own. Both come whichever one was cut off, so the content does not
53
+ * change with the width.
54
+ */
55
+ function getAutoTitle(children, description) {
56
+ if (typeof description !== "string" || !description) return children;
57
+ if (!children) return description;
58
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
59
+ children,
60
+ "\n",
61
+ description
62
+ ] });
63
+ }
64
+ /**
51
65
  * The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip
52
66
  * is rendered at all.
53
67
  */
54
- function resolveTooltip({ tooltip, children, labelProps, isDynamicLabel, isLabelOverflowed }) {
68
+ function resolveTooltip({ tooltip, children, description, labelProps, isDynamicLabel, isOverflowed }) {
55
69
  if (!tooltip) return null;
56
70
  if (typeof tooltip === "string") return { title: tooltip };
57
- const hasAutoContent = !!(children || labelProps) && (isLabelOverflowed || isDynamicLabel);
71
+ const autoTitle = getAutoTitle(children, description);
72
+ const hasAutoContent = !!(autoTitle || labelProps) && (isOverflowed || isDynamicLabel);
58
73
  if (tooltip === true) {
59
74
  if (!hasAutoContent) return null;
60
75
  return {
61
- title: children,
62
- isDisabled: !isLabelOverflowed && isDynamicLabel
76
+ title: autoTitle,
77
+ isDisabled: !isOverflowed && isDynamicLabel
63
78
  };
64
79
  }
65
80
  const { auto, ...tooltipProps } = tooltip;
66
81
  if (tooltipProps.title && auto !== true) return tooltipProps;
67
82
  if (!hasAutoContent) return null;
68
83
  return {
69
- title: tooltipProps.title ?? children,
70
- isDisabled: !isLabelOverflowed && isDynamicLabel && tooltipProps.isDisabled !== true,
84
+ title: tooltipProps.title ?? autoTitle,
85
+ isDisabled: !isOverflowed && isDynamicLabel && tooltipProps.isDisabled !== true,
71
86
  ...tooltipProps
72
87
  };
73
88
  }
89
+ /** Whether a measured node's text is cut off. */
90
+ function isTruncated(element) {
91
+ return !!element && element.scrollWidth > element.clientWidth;
92
+ }
93
+ /**
94
+ * Points the hook's one observer at the nodes now measured, so a row with a
95
+ * label and a description still costs a single observer. It re-points by
96
+ * disconnecting and observing again rather than with `unobserve`: those are
97
+ * the only two calls the hook has ever made, so a consumer's test stub that
98
+ * implements just them keeps working.
99
+ */
100
+ function observeMeasuredNodes(measured, onResize) {
101
+ try {
102
+ measured.observer?.disconnect();
103
+ } catch {}
104
+ const { label, description } = measured;
105
+ if (!label && !description) return;
106
+ measured.observer ??= new ResizeObserver(() => onResize());
107
+ if (label) measured.observer.observe(label);
108
+ if (description) measured.observer.observe(description);
109
+ }
74
110
  function useAutoTooltip(t0) {
75
- const $ = c(33);
76
- const { tooltip, children, labelProps, isDynamicLabel: t1, labelRef: labelRefOption } = t0;
111
+ const $ = c(42);
112
+ const { tooltip, children, description, labelProps, isDynamicLabel: t1, labelRef: labelRefOption, descriptionRef: descriptionRefOption } = t0;
77
113
  const isDynamicLabel = t1 === void 0 ? false : t1;
78
114
  let t2;
79
- if ($[0] !== children || $[1] !== tooltip) {
80
- t2 = isAutoTooltip(tooltip, children);
81
- $[0] = children;
82
- $[1] = tooltip;
83
- $[2] = t2;
84
- } else t2 = $[2];
85
- const isAutoTooltipEnabled = t2;
115
+ if ($[0] !== tooltip) {
116
+ t2 = allowsAutoTooltip(tooltip);
117
+ $[0] = tooltip;
118
+ $[1] = t2;
119
+ } else t2 = $[1];
120
+ const allowsAuto = t2;
121
+ const isLabelMeasured = allowsAuto && typeof children === "string";
122
+ const isDescriptionMeasured = allowsAuto && typeof description === "string";
123
+ const isAutoTooltipEnabled = isLabelMeasured || isDescriptionMeasured;
86
124
  const externalLabelRef = labelProps?.ref;
87
- const [isLabelOverflowed, setIsLabelOverflowed] = useState(false);
88
- const elementRef = useRef(null);
89
- const resizeObserverRef = useRef(null);
90
- const verdictRef = useRef(false);
125
+ const [isOverflowed, setIsOverflowed] = useState(false);
91
126
  let t3;
127
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
128
+ t3 = {
129
+ label: null,
130
+ description: null,
131
+ observer: null
132
+ };
133
+ $[2] = t3;
134
+ } else t3 = $[2];
135
+ const measuredRef = useRef(t3);
136
+ const verdictRef = useRef(false);
137
+ let t4;
92
138
  if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
93
- t3 = (value) => {
139
+ t4 = (value) => {
94
140
  if (verdictRef.current === value) return;
95
141
  verdictRef.current = value;
96
- setIsLabelOverflowed(value);
142
+ setIsOverflowed(value);
97
143
  };
98
- $[3] = t3;
99
- } else t3 = $[3];
100
- const setVerdict = t3;
101
- let t4;
102
- if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
103
- t4 = () => {
104
- const label = elementRef.current;
105
- if (!label) return;
106
- setVerdict(label.scrollWidth > label.clientWidth);
107
- };
108
- $[4] = t4;
109
- } else t4 = $[4];
110
- const checkLabelOverflow = t4;
144
+ $[3] = t4;
145
+ } else t4 = $[3];
146
+ const setVerdict = t4;
111
147
  let t5;
112
- if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
148
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
113
149
  t5 = () => {
114
- queueOverflowCheck(checkLabelOverflow);
150
+ const { label, description: description_0 } = measuredRef.current;
151
+ if (!label && !description_0) return;
152
+ setVerdict(isTruncated(label) || isTruncated(description_0));
115
153
  };
116
- $[5] = t5;
117
- } else t5 = $[5];
118
- const scheduleLabelOverflowCheck = t5;
154
+ $[4] = t5;
155
+ } else t5 = $[4];
156
+ const checkOverflow = t5;
119
157
  let t6;
158
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
159
+ t6 = () => {
160
+ queueOverflowCheck(checkOverflow);
161
+ };
162
+ $[5] = t6;
163
+ } else t6 = $[5];
164
+ const scheduleOverflowCheck = t6;
120
165
  let t7;
121
166
  if ($[6] !== isAutoTooltipEnabled) {
122
- t6 = () => {
167
+ t7 = () => {
123
168
  if (isAutoTooltipEnabled) {
124
- scheduleLabelOverflowCheck();
169
+ scheduleOverflowCheck();
125
170
  return;
126
171
  }
127
172
  setVerdict(false);
128
173
  };
129
- t7 = [
174
+ $[6] = isAutoTooltipEnabled;
175
+ $[7] = t7;
176
+ } else t7 = $[7];
177
+ let t8;
178
+ if ($[8] !== isAutoTooltipEnabled || $[9] !== isDescriptionMeasured || $[10] !== isLabelMeasured) {
179
+ t8 = [
130
180
  isAutoTooltipEnabled,
131
- scheduleLabelOverflowCheck,
181
+ isLabelMeasured,
182
+ isDescriptionMeasured,
183
+ scheduleOverflowCheck,
132
184
  setVerdict
133
185
  ];
134
- $[6] = isAutoTooltipEnabled;
135
- $[7] = t6;
136
- $[8] = t7;
137
- } else {
138
- t6 = $[7];
139
- t7 = $[8];
140
- }
141
- useEffect(t6, t7);
142
- let t8;
143
- if ($[9] !== externalLabelRef || $[10] !== isAutoTooltipEnabled || $[11] !== labelRefOption) {
144
- t8 = (element) => {
145
- assignRef(externalLabelRef, element);
146
- assignRef(labelRefOption, element);
147
- if (resizeObserverRef.current) {
148
- try {
149
- resizeObserverRef.current.disconnect();
150
- } catch {}
151
- resizeObserverRef.current = null;
152
- }
153
- elementRef.current = element;
154
- if (!isAutoTooltipEnabled) {
155
- setVerdict(false);
156
- return;
157
- }
186
+ $[8] = isAutoTooltipEnabled;
187
+ $[9] = isDescriptionMeasured;
188
+ $[10] = isLabelMeasured;
189
+ $[11] = t8;
190
+ } else t8 = $[11];
191
+ useEffect(t7, t8);
192
+ let t9;
193
+ if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
194
+ t9 = (part, element) => {
195
+ const measured = measuredRef.current;
196
+ measured[part] = element;
197
+ observeMeasuredNodes(measured, checkOverflow);
158
198
  if (!element) return;
159
- scheduleLabelOverflowCheck();
160
- const obs = new ResizeObserver(() => {
161
- checkLabelOverflow();
162
- });
163
- resizeObserverRef.current = obs;
164
- obs.observe(element);
199
+ scheduleOverflowCheck();
165
200
  };
166
- $[9] = externalLabelRef;
167
- $[10] = isAutoTooltipEnabled;
168
- $[11] = labelRefOption;
169
- $[12] = t8;
170
- } else t8 = $[12];
171
- const handleLabelElementRef = t8;
172
- let t9;
173
- if ($[13] !== labelProps) {
174
- t9 = labelProps || {};
175
- $[13] = labelProps;
176
- $[14] = t9;
177
- } else t9 = $[14];
178
- let finalLabelProps;
179
- if ($[15] !== t9) {
180
- const { ref: _labelPropsRef, ...t10 } = t9;
181
- finalLabelProps = t10;
182
- $[15] = t9;
183
- $[16] = finalLabelProps;
184
- } else finalLabelProps = $[16];
201
+ $[12] = t9;
202
+ } else t9 = $[12];
203
+ const attachMeasuredNode = t9;
185
204
  let t10;
186
- if ($[17] !== children || $[18] !== isDynamicLabel || $[19] !== isLabelOverflowed || $[20] !== labelProps || $[21] !== tooltip) {
187
- t10 = resolveTooltip({
205
+ if ($[13] !== externalLabelRef || $[14] !== isLabelMeasured || $[15] !== labelRefOption) {
206
+ t10 = (element_0) => {
207
+ assignRef(externalLabelRef, element_0);
208
+ assignRef(labelRefOption, element_0);
209
+ attachMeasuredNode("label", isLabelMeasured ? element_0 : null);
210
+ };
211
+ $[13] = externalLabelRef;
212
+ $[14] = isLabelMeasured;
213
+ $[15] = labelRefOption;
214
+ $[16] = t10;
215
+ } else t10 = $[16];
216
+ const handleLabelElementRef = t10;
217
+ let t11;
218
+ if ($[17] !== descriptionRefOption || $[18] !== isDescriptionMeasured) {
219
+ t11 = (element_1) => {
220
+ assignRef(descriptionRefOption, element_1);
221
+ attachMeasuredNode("description", isDescriptionMeasured ? element_1 : null);
222
+ };
223
+ $[17] = descriptionRefOption;
224
+ $[18] = isDescriptionMeasured;
225
+ $[19] = t11;
226
+ } else t11 = $[19];
227
+ const handleDescriptionElementRef = t11;
228
+ let t12;
229
+ if ($[20] !== labelProps) {
230
+ t12 = labelProps || {};
231
+ $[20] = labelProps;
232
+ $[21] = t12;
233
+ } else t12 = $[21];
234
+ let finalLabelProps;
235
+ if ($[22] !== t12) {
236
+ const { ref: _labelPropsRef, ...t13 } = t12;
237
+ finalLabelProps = t13;
238
+ $[22] = t12;
239
+ $[23] = finalLabelProps;
240
+ } else finalLabelProps = $[23];
241
+ let t13;
242
+ if ($[24] !== children || $[25] !== description || $[26] !== isDynamicLabel || $[27] !== isOverflowed || $[28] !== labelProps || $[29] !== tooltip) {
243
+ t13 = resolveTooltip({
188
244
  tooltip,
189
245
  children,
246
+ description,
190
247
  labelProps,
191
248
  isDynamicLabel,
192
- isLabelOverflowed
249
+ isOverflowed
193
250
  });
194
- $[17] = children;
195
- $[18] = isDynamicLabel;
196
- $[19] = isLabelOverflowed;
197
- $[20] = labelProps;
198
- $[21] = tooltip;
199
- $[22] = t10;
200
- } else t10 = $[22];
201
- const resolvedTooltip = t10;
251
+ $[24] = children;
252
+ $[25] = description;
253
+ $[26] = isDynamicLabel;
254
+ $[27] = isOverflowed;
255
+ $[28] = labelProps;
256
+ $[29] = tooltip;
257
+ $[30] = t13;
258
+ } else t13 = $[30];
259
+ const resolvedTooltip = t13;
202
260
  const isTooltipActive = !!resolvedTooltip && resolvedTooltip.isDisabled !== true;
203
- let t11;
204
- if ($[23] !== resolvedTooltip) {
205
- t11 = (renderElement, defaultTooltipPlacement) => {
261
+ let t14;
262
+ if ($[31] !== resolvedTooltip) {
263
+ t14 = (renderElement, defaultTooltipPlacement) => {
206
264
  if (!resolvedTooltip) return renderElement();
207
265
  return /* @__PURE__ */ jsx(TooltipProvider, {
208
266
  placement: defaultTooltipPlacement,
@@ -210,32 +268,34 @@ function useAutoTooltip(t0) {
210
268
  children: (triggerProps, ref) => renderElement(triggerProps, ref)
211
269
  });
212
270
  };
213
- $[23] = resolvedTooltip;
214
- $[24] = t11;
215
- } else t11 = $[24];
216
- const renderWithTooltip = t11;
217
- const t12 = !!tooltip;
218
- let t13;
219
- if ($[25] !== finalLabelProps || $[26] !== handleLabelElementRef || $[27] !== isAutoTooltipEnabled || $[28] !== isLabelOverflowed || $[29] !== isTooltipActive || $[30] !== renderWithTooltip || $[31] !== t12) {
220
- t13 = {
271
+ $[31] = resolvedTooltip;
272
+ $[32] = t14;
273
+ } else t14 = $[32];
274
+ const renderWithTooltip = t14;
275
+ const t15 = !!tooltip;
276
+ let t16;
277
+ if ($[33] !== finalLabelProps || $[34] !== handleDescriptionElementRef || $[35] !== handleLabelElementRef || $[36] !== isAutoTooltipEnabled || $[37] !== isOverflowed || $[38] !== isTooltipActive || $[39] !== renderWithTooltip || $[40] !== t15) {
278
+ t16 = {
221
279
  labelRef: handleLabelElementRef,
280
+ descriptionRef: handleDescriptionElementRef,
222
281
  labelProps: finalLabelProps,
223
- isLabelOverflowed,
282
+ isOverflowed,
224
283
  isAutoTooltipEnabled,
225
- hasTooltip: t12,
284
+ hasTooltip: t15,
226
285
  isTooltipActive,
227
286
  renderWithTooltip
228
287
  };
229
- $[25] = finalLabelProps;
230
- $[26] = handleLabelElementRef;
231
- $[27] = isAutoTooltipEnabled;
232
- $[28] = isLabelOverflowed;
233
- $[29] = isTooltipActive;
234
- $[30] = renderWithTooltip;
235
- $[31] = t12;
236
- $[32] = t13;
237
- } else t13 = $[32];
238
- return t13;
288
+ $[33] = finalLabelProps;
289
+ $[34] = handleDescriptionElementRef;
290
+ $[35] = handleLabelElementRef;
291
+ $[36] = isAutoTooltipEnabled;
292
+ $[37] = isOverflowed;
293
+ $[38] = isTooltipActive;
294
+ $[39] = renderWithTooltip;
295
+ $[40] = t15;
296
+ $[41] = t16;
297
+ } else t16 = $[41];
298
+ return t16;
239
299
  }
240
300
 
241
301
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-auto-tooltip.js","names":["HTMLAttributes","ReactNode","Ref","RefObject","useCallback","useEffect","useRef","useState","OverlayProps","flushSync","CubeTooltipProviderProps","TooltipProvider","Props","AutoTooltipValue","Omit","auto","UseAutoTooltipOptions","tooltip","children","labelProps","isDynamicLabel","labelRef","HTMLElement","assignRef","ref","element","current","pendingOverflowChecks","Set","runOverflowChecks","checks","Array","from","clear","check","queueOverflowCheck","size","queueMicrotask","add","isAutoTooltip","title","undefined","resolveTooltip","isLabelOverflowed","hasAutoContent","isDisabled","tooltipProps","useAutoTooltip","t0","$","_c","t1","labelRefOption","t2","isAutoTooltipEnabled","externalLabelRef","setIsLabelOverflowed","elementRef","resizeObserverRef","verdictRef","t3","Symbol","for","value","setVerdict","t4","label","scrollWidth","clientWidth","checkLabelOverflow","t5","scheduleLabelOverflowCheck","t6","t7","t8","disconnect","obs","ResizeObserver","observe","handleLabelElementRef","t9","finalLabelProps","_labelPropsRef","t10","resolvedTooltip","isTooltipActive","t11","renderElement","defaultTooltipPlacement","triggerProps","renderWithTooltip","t12","t13","hasTooltip"],"sources":["../../../src/components/content/use-auto-tooltip.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n ReactNode,\n Ref,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { OverlayProps } from 'react-aria';\nimport { flushSync } from 'react-dom';\n\nimport {\n CubeTooltipProviderProps,\n TooltipProvider,\n} from '../overlays/Tooltip/TooltipProvider';\n\nimport type { Props } from '../../props';\n\nexport type AutoTooltipValue =\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n\nexport interface UseAutoTooltipOptions {\n tooltip: AutoTooltipValue | undefined;\n children: ReactNode;\n labelProps?: Props;\n isDynamicLabel?: boolean;\n /**\n * The caller's own ref to the label element. The hook owns the label's ref\n * (it measures the node), so a caller that also needs the node hands its ref\n * over here rather than attaching a second one.\n */\n labelRef?: Ref<HTMLElement>;\n}\n\nfunction assignRef(ref: unknown, element: HTMLElement | null) {\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n (ref as { current: HTMLElement | null }).current = element;\n }\n}\n\n/** Overflow checks queued for the end of the current task, from every label. */\nconst pendingOverflowChecks = new Set<() => void>();\n\n/**\n * Runs every queued check in one pass and commits the verdicts that changed in\n * one synchronous render.\n *\n * All reads happen before React touches the DOM again, so they share one\n * layout. `flushSync` applies the verdicts, and the `TooltipProvider` remounts\n * they cause, before paint and before any other task, so code that looks the\n * label up after this task gets the node the verdict leaves in place, not one\n * about to be replaced. Outside a React commit this is an ordinary sync\n * render, not a nested update.\n */\nfunction runOverflowChecks() {\n const checks = Array.from(pendingOverflowChecks);\n\n pendingOverflowChecks.clear();\n\n flushSync(() => {\n for (const check of checks) check();\n });\n}\n\nfunction queueOverflowCheck(check: () => void) {\n if (!pendingOverflowChecks.size) queueMicrotask(runOverflowChecks);\n\n pendingOverflowChecks.add(check);\n}\n\n/**\n * Whether the tooltip detects label overflow on its own. Overflow detection\n * measures text, so it needs a string label.\n */\nfunction isAutoTooltip(\n tooltip: AutoTooltipValue | undefined,\n children: ReactNode,\n): boolean {\n if (typeof children !== 'string') return false;\n\n // Boolean true enables auto overflow detection\n if (tooltip === true) return true;\n if (typeof tooltip === 'object') {\n // If title is provided and auto is explicitly true, enable auto overflow detection\n if (tooltip.title) {\n return tooltip.auto === true;\n }\n\n // If no title is provided, default to auto=true unless explicitly disabled\n return tooltip.auto !== undefined ? !!tooltip.auto : true;\n }\n return false;\n}\n\n/**\n * The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip\n * is rendered at all.\n */\nfunction resolveTooltip({\n tooltip,\n children,\n labelProps,\n isDynamicLabel,\n isLabelOverflowed,\n}: Omit<UseAutoTooltipOptions, 'labelRef'> & {\n isLabelOverflowed: boolean;\n}): Omit<CubeTooltipProviderProps, 'children'> | null {\n if (!tooltip) return null;\n\n // String tooltip - simple case\n if (typeof tooltip === 'string') {\n return { title: tooltip };\n }\n\n const hasAutoContent =\n !!(children || labelProps) && (isLabelOverflowed || isDynamicLabel);\n\n // Boolean tooltip - auto tooltip on overflow\n if (tooltip === true) {\n if (!hasAutoContent) return null;\n\n return {\n title: children,\n isDisabled: !isLabelOverflowed && isDynamicLabel,\n };\n }\n\n // Object tooltip - advanced configuration\n const { auto, ...tooltipProps } = tooltip;\n\n // If title is provided and auto is not explicitly true, always show the tooltip\n if (tooltipProps.title && auto !== true) {\n return tooltipProps;\n }\n\n // If title is provided with auto=true, OR no title but auto behavior enabled\n if (!hasAutoContent) return null;\n\n return {\n title: tooltipProps.title ?? children,\n isDisabled:\n !isLabelOverflowed && isDynamicLabel && tooltipProps.isDisabled !== true,\n ...tooltipProps,\n };\n}\n\nexport function useAutoTooltip({\n tooltip,\n children,\n labelProps,\n isDynamicLabel = false,\n labelRef: labelRefOption,\n}: UseAutoTooltipOptions) {\n const isAutoTooltipEnabled = isAutoTooltip(tooltip, children);\n\n // Track label overflow for auto tooltip (only when enabled)\n const externalLabelRef = (labelProps as any)?.ref;\n const [isLabelOverflowed, setIsLabelOverflowed] = useState(false);\n const elementRef = useRef<HTMLElement | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n\n const verdictRef = useRef(false);\n\n /**\n * Sets the verdict only when it changes. React skips an unchanged `setState`\n * only while the component has no other update queued; otherwise the no-op is\n * enqueued like any other update. From an effect flushed inside a sync commit\n * that is a pending update, and a nested one — see the mount effect below.\n * Mirroring the verdict makes every unchanged write free, whatever else the\n * component has queued.\n */\n const setVerdict = useCallback((value: boolean) => {\n if (verdictRef.current === value) return;\n\n verdictRef.current = value;\n setIsLabelOverflowed(value);\n }, []);\n\n const checkLabelOverflow = useCallback(() => {\n const label = elementRef.current;\n\n if (!label) return;\n\n setVerdict(label.scrollWidth > label.clientWidth);\n }, [setVerdict]);\n\n /**\n * Measure once the current task has finished, not inside it.\n *\n * A microtask runs after React's whole commit — every mutation, layout effect\n * and ref attachment — and before paint. Every label on the page therefore\n * reads after all of them have written, so the reads collapse into one style\n * and layout flush instead of forcing one each, mid-commit. Reading straight\n * from the callback ref is what cost 122ms of `get scrollWidth` in one Cloud\n * profile, more than the entire style engine.\n *\n * A microtask rather than the observer's first delivery: observer callbacks\n * are part of the rendering steps, so a runner that is not producing frames —\n * a background tab, or a headless browser running many stories at once — can\n * delay them past the point something asks whether the tooltip is active.\n * Microtasks do not depend on a frame. See `runOverflowChecks` for how the\n * verdicts are applied.\n */\n const scheduleLabelOverflowCheck = useCallback(() => {\n queueOverflowCheck(checkLabelOverflow);\n }, [checkLabelOverflow]);\n\n useEffect(() => {\n if (isAutoTooltipEnabled) {\n // Queued, not measured here. React 19 flushes a sync commit's passive\n // effects before the commit returns, so a verdict set from this effect\n // leaves that commit with an update pending — a nested update. A list\n // that commits each row on its own (ag-grid-react wraps every new row in\n // `flushSync`) then gains one per row, and React throws \"Maximum update\n // depth exceeded\" once the count passes 50. The queued check runs after\n // the commit and still before paint. The callback ref has usually queued\n // it already, so this call is absorbed. It matters when the flag flips on\n // for a label whose ref did not re-attach.\n scheduleLabelOverflowCheck();\n\n return;\n }\n\n // Clearing here rather than in the callback ref, which cannot be trusted\n // to do it. Flipping `isAutoTooltipEnabled` changes the ref's identity, so\n // React detaches with the PREVIOUS callback — the one that still believes\n // auto tooltips are on, and therefore keeps the last verdict — and only\n // attaches the new one if the label still exists. When `children` stops\n // being a string the label unmounts, so the new callback never runs and a\n // stale `true` would keep an auto tooltip mounted over content that is no\n // longer text. That is the default `Button` path, where `tooltip` is `true`.\n setVerdict(false);\n }, [isAutoTooltipEnabled, scheduleLabelOverflowCheck, setVerdict]);\n\n // Attach ResizeObserver via callback ref to handle DOM node changes. The ref\n // also owns teardown: React hands it `null` when the label goes away. An\n // unmount effect must not repeat that. React 18 Strict Mode replays effects\n // without re-attaching refs, so the replay would drop the node and observer\n // for good and strand the queued check.\n const handleLabelElementRef = useCallback(\n (element: HTMLElement | null) => {\n // Notify the external refs\n assignRef(externalLabelRef, element);\n assignRef(labelRefOption, element);\n\n // Disconnect previous observer\n if (resizeObserverRef.current) {\n try {\n resizeObserverRef.current.disconnect();\n } catch {\n // do nothing\n }\n resizeObserverRef.current = null;\n }\n\n elementRef.current = element;\n\n if (!isAutoTooltipEnabled) {\n setVerdict(false);\n\n return;\n }\n\n // No node to measure. Leave the previous verdict alone rather than\n // clearing it: turning the verdict on mounts `TooltipProvider`, which\n // remounts the label underneath it, so React detaches the old node and\n // attaches a new one within that commit. Clearing here would unmount the\n // provider, remount the label, measure it, mount the provider again — a\n // loop that never settles.\n if (!element) return;\n\n // Do NOT measure synchronously here — see `scheduleLabelOverflowCheck`.\n // This covers the node the ref just handed us, including the fresh one\n // React creates when `TooltipProvider` mounts and remounts the label.\n scheduleLabelOverflowCheck();\n\n // The observer covers every later size change.\n const obs = new ResizeObserver(() => {\n checkLabelOverflow();\n });\n\n resizeObserverRef.current = obs;\n\n obs.observe(element);\n },\n [\n externalLabelRef,\n labelRefOption,\n isAutoTooltipEnabled,\n checkLabelOverflow,\n scheduleLabelOverflowCheck,\n setVerdict,\n ],\n );\n\n const { ref: _labelPropsRef, ...finalLabelProps } = labelProps || {};\n\n // Resolved once so that both the rendering below and `isTooltipActive` speak\n // about the same tooltip.\n const resolvedTooltip = resolveTooltip({\n tooltip,\n children,\n labelProps,\n isDynamicLabel,\n isLabelOverflowed,\n });\n\n /** Whether a tooltip is rendered and able to open. */\n const isTooltipActive =\n !!resolvedTooltip && resolvedTooltip.isDisabled !== true;\n\n const renderWithTooltip = (\n renderElement: (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ) => ReactNode,\n defaultTooltipPlacement: OverlayProps['placement'],\n ) => {\n if (!resolvedTooltip) return renderElement();\n\n return (\n <TooltipProvider placement={defaultTooltipPlacement} {...resolvedTooltip}>\n {(triggerProps, ref) => renderElement(triggerProps, ref)}\n </TooltipProvider>\n );\n };\n\n return {\n labelRef: handleLabelElementRef,\n labelProps: finalLabelProps,\n isLabelOverflowed,\n isAutoTooltipEnabled,\n hasTooltip: !!tooltip,\n isTooltipActive,\n renderWithTooltip,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-auto-tooltip.js","names":["HTMLAttributes","ReactNode","Ref","RefObject","useCallback","useEffect","useRef","useState","OverlayProps","flushSync","CubeTooltipProviderProps","TooltipProvider","Props","AutoTooltipValue","Omit","auto","UseAutoTooltipOptions","tooltip","children","description","labelProps","isDynamicLabel","labelRef","HTMLElement","descriptionRef","assignRef","ref","element","current","pendingOverflowChecks","Set","runOverflowChecks","checks","Array","from","clear","check","queueOverflowCheck","size","queueMicrotask","add","allowsAutoTooltip","title","undefined","getAutoTitle","resolveTooltip","isOverflowed","autoTitle","hasAutoContent","isDisabled","tooltipProps","isTruncated","scrollWidth","clientWidth","MeasuredNodes","label","observer","ResizeObserver","observeMeasuredNodes","measured","onResize","disconnect","observe","useAutoTooltip","t0","$","_c","t1","labelRefOption","descriptionRefOption","t2","allowsAuto","isLabelMeasured","isDescriptionMeasured","isAutoTooltipEnabled","externalLabelRef","setIsOverflowed","t3","Symbol","for","measuredRef","verdictRef","t4","value","setVerdict","t5","description_0","checkOverflow","t6","scheduleOverflowCheck","t7","t8","t9","part","attachMeasuredNode","t10","element_0","handleLabelElementRef","t11","element_1","handleDescriptionElementRef","t12","finalLabelProps","_labelPropsRef","t13","resolvedTooltip","isTooltipActive","t14","renderElement","defaultTooltipPlacement","triggerProps","renderWithTooltip","t15","t16","hasTooltip"],"sources":["../../../src/components/content/use-auto-tooltip.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n ReactNode,\n Ref,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { OverlayProps } from 'react-aria';\nimport { flushSync } from 'react-dom';\n\nimport {\n CubeTooltipProviderProps,\n TooltipProvider,\n} from '../overlays/Tooltip/TooltipProvider';\n\nimport type { Props } from '../../props';\n\nexport type AutoTooltipValue =\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n\nexport interface UseAutoTooltipOptions {\n tooltip: AutoTooltipValue | undefined;\n children: ReactNode;\n /**\n * Secondary text that truncates alongside the label, such as `Item`'s\n * description. A string description is measured with the label, and the auto\n * tooltip shows both whenever either one is cut off.\n */\n description?: ReactNode;\n labelProps?: Props;\n isDynamicLabel?: boolean;\n /**\n * The caller's own ref to the label element. The hook owns the label's ref\n * (it measures the node), so a caller that also needs the node hands its ref\n * over here rather than attaching a second one.\n */\n labelRef?: Ref<HTMLElement>;\n /** The caller's own ref to the description element, as `labelRef`. */\n descriptionRef?: Ref<HTMLElement>;\n}\n\nfunction assignRef(ref: unknown, element: HTMLElement | null) {\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n (ref as { current: HTMLElement | null }).current = element;\n }\n}\n\n/** Overflow checks queued for the end of the current task, from every label. */\nconst pendingOverflowChecks = new Set<() => void>();\n\n/**\n * Runs every queued check in one pass and commits the verdicts that changed in\n * one synchronous render.\n *\n * All reads happen before React touches the DOM again, so they share one\n * layout. `flushSync` applies the verdicts, and the `TooltipProvider` remounts\n * they cause, before paint and before any other task, so code that looks the\n * label up after this task gets the node the verdict leaves in place, not one\n * about to be replaced. Outside a React commit this is an ordinary sync\n * render, not a nested update.\n */\nfunction runOverflowChecks() {\n const checks = Array.from(pendingOverflowChecks);\n\n pendingOverflowChecks.clear();\n\n flushSync(() => {\n for (const check of checks) check();\n });\n}\n\nfunction queueOverflowCheck(check: () => void) {\n if (!pendingOverflowChecks.size) queueMicrotask(runOverflowChecks);\n\n pendingOverflowChecks.add(check);\n}\n\n/**\n * Whether the tooltip value asks to detect overflow on its own. What it\n * measures is decided separately: overflow detection measures text, so only a\n * string label or description takes part.\n */\nfunction allowsAutoTooltip(tooltip: AutoTooltipValue | undefined): boolean {\n // Boolean true enables auto overflow detection\n if (tooltip === true) return true;\n if (typeof tooltip === 'object') {\n // If title is provided and auto is explicitly true, enable auto overflow detection\n if (tooltip.title) {\n return tooltip.auto === true;\n }\n\n // If no title is provided, default to auto=true unless explicitly disabled\n return tooltip.auto !== undefined ? !!tooltip.auto : true;\n }\n return false;\n}\n\n/**\n * What the auto tooltip shows: the label, then a string description on a line\n * of its own. Both come whichever one was cut off, so the content does not\n * change with the width.\n */\nfunction getAutoTitle(children: ReactNode, description: ReactNode): ReactNode {\n if (typeof description !== 'string' || !description) return children;\n if (!children) return description;\n\n // The tooltip renders `white-space: pre-line`, so the break shows.\n return (\n <>\n {children}\n {'\\n'}\n {description}\n </>\n );\n}\n\n/**\n * The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip\n * is rendered at all.\n */\nfunction resolveTooltip({\n tooltip,\n children,\n description,\n labelProps,\n isDynamicLabel,\n isOverflowed,\n}: Omit<UseAutoTooltipOptions, 'labelRef' | 'descriptionRef'> & {\n isOverflowed: boolean;\n}): Omit<CubeTooltipProviderProps, 'children'> | null {\n if (!tooltip) return null;\n\n // String tooltip - simple case\n if (typeof tooltip === 'string') {\n return { title: tooltip };\n }\n\n const autoTitle = getAutoTitle(children, description);\n const hasAutoContent =\n !!(autoTitle || labelProps) && (isOverflowed || isDynamicLabel);\n\n // Boolean tooltip - auto tooltip on overflow\n if (tooltip === true) {\n if (!hasAutoContent) return null;\n\n return {\n title: autoTitle,\n isDisabled: !isOverflowed && isDynamicLabel,\n };\n }\n\n // Object tooltip - advanced configuration\n const { auto, ...tooltipProps } = tooltip;\n\n // If title is provided and auto is not explicitly true, always show the tooltip\n if (tooltipProps.title && auto !== true) {\n return tooltipProps;\n }\n\n // If title is provided with auto=true, OR no title but auto behavior enabled\n if (!hasAutoContent) return null;\n\n return {\n title: tooltipProps.title ?? autoTitle,\n isDisabled:\n !isOverflowed && isDynamicLabel && tooltipProps.isDisabled !== true,\n ...tooltipProps,\n };\n}\n\n/** Whether a measured node's text is cut off. */\nfunction isTruncated(element: HTMLElement | null): boolean {\n return !!element && element.scrollWidth > element.clientWidth;\n}\n\ninterface MeasuredNodes {\n label: HTMLElement | null;\n description: HTMLElement | null;\n observer: ResizeObserver | null;\n}\n\n/**\n * Points the hook's one observer at the nodes now measured, so a row with a\n * label and a description still costs a single observer. It re-points by\n * disconnecting and observing again rather than with `unobserve`: those are\n * the only two calls the hook has ever made, so a consumer's test stub that\n * implements just them keeps working.\n */\nfunction observeMeasuredNodes(measured: MeasuredNodes, onResize: () => void) {\n try {\n measured.observer?.disconnect();\n } catch {\n // do nothing\n }\n\n const { label, description } = measured;\n\n if (!label && !description) return;\n\n measured.observer ??= new ResizeObserver(() => onResize());\n\n if (label) measured.observer.observe(label);\n if (description) measured.observer.observe(description);\n}\n\nexport function useAutoTooltip({\n tooltip,\n children,\n description,\n labelProps,\n isDynamicLabel = false,\n labelRef: labelRefOption,\n descriptionRef: descriptionRefOption,\n}: UseAutoTooltipOptions) {\n const allowsAuto = allowsAutoTooltip(tooltip);\n const isLabelMeasured = allowsAuto && typeof children === 'string';\n const isDescriptionMeasured = allowsAuto && typeof description === 'string';\n const isAutoTooltipEnabled = isLabelMeasured || isDescriptionMeasured;\n\n // Track overflow for auto tooltip (only when enabled)\n const externalLabelRef = (labelProps as any)?.ref;\n const [isOverflowed, setIsOverflowed] = useState(false);\n // The nodes being measured, and the one observer watching all of them.\n const measuredRef = useRef<MeasuredNodes>({\n label: null,\n description: null,\n observer: null,\n });\n\n const verdictRef = useRef(false);\n\n /**\n * Sets the verdict only when it changes. React skips an unchanged `setState`\n * only while the component has no other update queued; otherwise the no-op is\n * enqueued like any other update. From an effect flushed inside a sync commit\n * that is a pending update, and a nested one — see the mount effect below.\n * Mirroring the verdict makes every unchanged write free, whatever else the\n * component has queued.\n */\n const setVerdict = useCallback((value: boolean) => {\n if (verdictRef.current === value) return;\n\n verdictRef.current = value;\n setIsOverflowed(value);\n }, []);\n\n const checkOverflow = useCallback(() => {\n const { label, description } = measuredRef.current;\n\n if (!label && !description) return;\n\n setVerdict(isTruncated(label) || isTruncated(description));\n }, [setVerdict]);\n\n /**\n * Measure once the current task has finished, not inside it.\n *\n * A microtask runs after React's whole commit — every mutation, layout effect\n * and ref attachment — and before paint. Every label on the page therefore\n * reads after all of them have written, so the reads collapse into one style\n * and layout flush instead of forcing one each, mid-commit. Reading straight\n * from the callback ref is what cost 122ms of `get scrollWidth` in one Cloud\n * profile, more than the entire style engine.\n *\n * A microtask rather than the observer's first delivery: observer callbacks\n * are part of the rendering steps, so a runner that is not producing frames —\n * a background tab, or a headless browser running many stories at once — can\n * delay them past the point something asks whether the tooltip is active.\n * Microtasks do not depend on a frame. See `runOverflowChecks` for how the\n * verdicts are applied.\n */\n const scheduleOverflowCheck = useCallback(() => {\n queueOverflowCheck(checkOverflow);\n }, [checkOverflow]);\n\n useEffect(() => {\n if (isAutoTooltipEnabled) {\n // Queued, not measured here. React 19 flushes a sync commit's passive\n // effects before the commit returns, so a verdict set from this effect\n // leaves that commit with an update pending — a nested update. A list\n // that commits each row on its own (ag-grid-react wraps every new row in\n // `flushSync`) then gains one per row, and React throws \"Maximum update\n // depth exceeded\" once the count passes 50. The queued check runs after\n // the commit and still before paint. The callback refs have usually\n // queued it already, so this call is absorbed. It matters when what is\n // measured changes without a node re-attaching — the description stops\n // being a string, say, while the label stays.\n scheduleOverflowCheck();\n\n return;\n }\n\n // Clearing here rather than in the callback ref, which cannot be trusted\n // to do it. Flipping `isAutoTooltipEnabled` changes the ref's identity, so\n // React detaches with the PREVIOUS callback — the one that still believes\n // auto tooltips are on, and therefore keeps the last verdict — and only\n // attaches the new one if the label still exists. When `children` stops\n // being a string the label unmounts, so the new callback never runs and a\n // stale `true` would keep an auto tooltip mounted over content that is no\n // longer text. That is the default `Button` path, where `tooltip` is `true`.\n setVerdict(false);\n }, [\n isAutoTooltipEnabled,\n isLabelMeasured,\n isDescriptionMeasured,\n scheduleOverflowCheck,\n setVerdict,\n ]);\n\n // The callback refs own the observer: React hands them `null` when a node\n // goes away. An unmount effect must not repeat that. React 18 Strict Mode\n // replays effects without re-attaching refs, so the replay would drop the\n // nodes and observer for good and strand the queued check.\n const attachMeasuredNode = useCallback(\n (part: 'label' | 'description', element: HTMLElement | null) => {\n const measured = measuredRef.current;\n\n measured[part] = element;\n // The observer covers every later size change.\n observeMeasuredNodes(measured, checkOverflow);\n\n // No node to measure. Leave the previous verdict alone rather than\n // clearing it: turning the verdict on mounts `TooltipProvider`, which\n // remounts the label underneath it, so React detaches the old node and\n // attaches a new one within that commit. Clearing here would unmount the\n // provider, remount the label, measure it, mount the provider again — a\n // loop that never settles.\n if (!element) return;\n\n // Do NOT measure synchronously here — see `scheduleOverflowCheck`. This\n // covers the node the ref just handed us, including the fresh one React\n // creates when `TooltipProvider` mounts and remounts the element.\n scheduleOverflowCheck();\n },\n [checkOverflow, scheduleOverflowCheck],\n );\n\n const handleLabelElementRef = useCallback(\n (element: HTMLElement | null) => {\n // Notify the external refs\n assignRef(externalLabelRef, element);\n assignRef(labelRefOption, element);\n\n attachMeasuredNode('label', isLabelMeasured ? element : null);\n },\n [externalLabelRef, labelRefOption, isLabelMeasured, attachMeasuredNode],\n );\n\n const handleDescriptionElementRef = useCallback(\n (element: HTMLElement | null) => {\n assignRef(descriptionRefOption, element);\n\n attachMeasuredNode('description', isDescriptionMeasured ? element : null);\n },\n [descriptionRefOption, isDescriptionMeasured, attachMeasuredNode],\n );\n\n const { ref: _labelPropsRef, ...finalLabelProps } = labelProps || {};\n\n // Resolved once so that both the rendering below and `isTooltipActive` speak\n // about the same tooltip.\n const resolvedTooltip = resolveTooltip({\n tooltip,\n children,\n description,\n labelProps,\n isDynamicLabel,\n isOverflowed,\n });\n\n /** Whether a tooltip is rendered and able to open. */\n const isTooltipActive =\n !!resolvedTooltip && resolvedTooltip.isDisabled !== true;\n\n const renderWithTooltip = (\n renderElement: (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ) => ReactNode,\n defaultTooltipPlacement: OverlayProps['placement'],\n ) => {\n if (!resolvedTooltip) return renderElement();\n\n return (\n <TooltipProvider placement={defaultTooltipPlacement} {...resolvedTooltip}>\n {(triggerProps, ref) => renderElement(triggerProps, ref)}\n </TooltipProvider>\n );\n };\n\n return {\n labelRef: handleLabelElementRef,\n descriptionRef: handleDescriptionElementRef,\n labelProps: finalLabelProps,\n isOverflowed,\n isAutoTooltipEnabled,\n hasTooltip: !!tooltip,\n isTooltipActive,\n renderWithTooltip,\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { _Text } from "../../content/Text.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { _Text } from "../../content/Text.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { _Pagination } from "../../navigation/Pagination/Pagination.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { Button } from "../../actions/index.js";
4
4
  import { ReloadIcon } from "../../../icons/ReloadIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-35a6e75 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-4c811db | Cube Dev Team */
2
2
  //#region src/components/data/TableBase/RowCollection.ts
3
3
  /**
4
4
  * A `Collection<Node<T>>` over a plain row array.