@cube-dev/ui-kit 0.133.0 → 0.135.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/dist/CHANGELOG.md +25 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +4 -3
  17. package/dist/components/Root.js.map +1 -1
  18. package/dist/components/actions/Action/Action.js +1 -1
  19. package/dist/components/actions/Banner/Banner.js +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 +1 -1
  25. package/dist/components/actions/CommandMenu/styled.js +2 -2
  26. package/dist/components/actions/CommandMenu/styled.js.map +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 +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/Item/Item.js +1 -1
  58. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  59. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  60. package/dist/components/content/Layout/GridLayout.js +1 -1
  61. package/dist/components/content/Layout/Layout.js +1 -1
  62. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  63. package/dist/components/content/Layout/LayoutCenter.d.ts +11 -1
  64. package/dist/components/content/Layout/LayoutCenter.js +23 -5
  65. package/dist/components/content/Layout/LayoutCenter.js.map +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +8 -2
  86. package/dist/components/content/Result/Result.js.map +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 +7 -7
  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 +57 -7
  94. package/dist/components/content/Tree/Tree.js.map +1 -1
  95. package/dist/components/content/Tree/TreeNode.js +1 -1
  96. package/dist/components/content/Tree/styled.js +1 -1
  97. package/dist/components/content/Tree/tree-index.js +1 -1
  98. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  99. package/dist/components/content/Tree/use-load-data.js +1 -1
  100. package/dist/components/content/highlightText.js +1 -1
  101. package/dist/components/content/use-auto-tooltip.js +1 -1
  102. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  103. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  104. package/dist/components/fields/Checkbox/context.js +1 -1
  105. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  106. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  107. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  108. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  109. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  110. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  111. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  112. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  113. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  114. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  115. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  116. package/dist/components/fields/DatePicker/intl.js +1 -1
  117. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  118. package/dist/components/fields/DatePicker/props.js +1 -1
  119. package/dist/components/fields/DatePicker/utils.js +1 -1
  120. package/dist/components/fields/FileInput/FileInput.js +1 -1
  121. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  122. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  123. package/dist/components/fields/Input/Input.js +1 -1
  124. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  125. package/dist/components/fields/ListBox/ListBox.js +1 -1
  126. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  127. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  128. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  129. package/dist/components/fields/Picker/Picker.js +1 -1
  130. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  131. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  132. package/dist/components/fields/RadioGroup/context.js +1 -1
  133. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  134. package/dist/components/fields/Select/Select.js +1 -1
  135. package/dist/components/fields/Slider/Gradation.js +1 -1
  136. package/dist/components/fields/Slider/HueSlider.js +1 -1
  137. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  138. package/dist/components/fields/Slider/Slider.js +1 -1
  139. package/dist/components/fields/Slider/SliderBase.js +1 -1
  140. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  141. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  142. package/dist/components/fields/Slider/elements.js +2 -2
  143. package/dist/components/fields/Slider/elements.js.map +1 -1
  144. package/dist/components/fields/Slider/index.js +1 -1
  145. package/dist/components/fields/Switch/Switch.js +1 -1
  146. package/dist/components/fields/TextArea/TextArea.js +1 -1
  147. package/dist/components/fields/TextInput/TextInput.js +1 -1
  148. package/dist/components/fields/TextInput/TextInputBase.js +2 -2
  149. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  150. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  151. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  152. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  153. package/dist/components/form/Form/Field.js +1 -1
  154. package/dist/components/form/Form/Form.js +1 -1
  155. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  156. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  157. package/dist/components/form/Form/SubmitError.js +1 -1
  158. package/dist/components/form/Form/index.js +1 -1
  159. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  160. package/dist/components/form/Form/use-field/use-field.js +1 -1
  161. package/dist/components/form/Form/use-form.js +1 -1
  162. package/dist/components/form/Form/validation.js +1 -1
  163. package/dist/components/form/Label.js +1 -1
  164. package/dist/components/form/wrapper.js +1 -1
  165. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  166. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  167. package/dist/components/layout/Flex.js +1 -1
  168. package/dist/components/layout/Flow.js +1 -1
  169. package/dist/components/layout/Grid.js +1 -1
  170. package/dist/components/layout/Panel.js +1 -1
  171. package/dist/components/layout/Prefix.js +1 -1
  172. package/dist/components/layout/ResizablePanel.js +1 -1
  173. package/dist/components/layout/Space.js +1 -1
  174. package/dist/components/layout/Suffix.js +1 -1
  175. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  176. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  177. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  178. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  179. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  180. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  181. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  182. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  183. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  184. package/dist/components/navigation/Tabs/styled.js +1 -1
  185. package/dist/components/navigation/Tabs/types.js +1 -1
  186. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  187. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  188. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  189. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  190. package/dist/components/other/Calendar/Calendar.js +1 -1
  191. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  192. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  193. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  194. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  195. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  196. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  197. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  198. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  199. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  200. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  201. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  202. package/dist/components/overlays/Dialog/context.js +1 -1
  203. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  204. package/dist/components/overlays/Modal/Modal.js +1 -1
  205. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  206. package/dist/components/overlays/Modal/Overlay.js +1 -1
  207. package/dist/components/overlays/Modal/Popover.js +1 -1
  208. package/dist/components/overlays/Modal/Tray.js +1 -1
  209. package/dist/components/overlays/Modal/Underlay.js +1 -1
  210. package/dist/components/overlays/Notifications/Notification.js +1 -1
  211. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  212. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  213. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  214. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  215. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  216. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  217. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  218. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  219. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  220. package/dist/components/overlays/Notifications/index.js +1 -1
  221. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  222. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  223. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  224. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  225. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  226. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  227. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  228. package/dist/components/overlays/Toast/index.js +1 -1
  229. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  230. package/dist/components/overlays/Toast/useToast.js +1 -1
  231. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  232. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  233. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  234. package/dist/components/overlays/Tooltip/context.js +1 -1
  235. package/dist/components/portal/Portal.js +1 -1
  236. package/dist/components/portal/PortalProvider.js +1 -1
  237. package/dist/components/portal/usePortal.js +1 -1
  238. package/dist/components/shared/DraggableCollection.js +1 -1
  239. package/dist/components/shared/InvalidIcon.js +1 -1
  240. package/dist/components/shared/ValidIcon.js +1 -1
  241. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  242. package/dist/components/status/Spin/Cube.js +1 -1
  243. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  244. package/dist/components/status/Spin/Spin.js +1 -1
  245. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  246. package/dist/data/item-themes.js +1 -1
  247. package/dist/data/themes.js +1 -1
  248. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  249. package/dist/icons/AdjustmentsIcon.js +1 -1
  250. package/dist/icons/AiIcon.js +1 -1
  251. package/dist/icons/AreaChartIcon.js +1 -1
  252. package/dist/icons/BackwardIcon.js +1 -1
  253. package/dist/icons/BarChartIcon.js +1 -1
  254. package/dist/icons/BellFilledIcon.js +1 -1
  255. package/dist/icons/BellIcon.js +1 -1
  256. package/dist/icons/BooleanIcon.js +1 -1
  257. package/dist/icons/CalendarEditIcon.js +1 -1
  258. package/dist/icons/CalendarIcon.js +1 -1
  259. package/dist/icons/CaretDownIcon.js +1 -1
  260. package/dist/icons/CaretUpIcon.js +1 -1
  261. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  262. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  263. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  264. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  265. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  266. package/dist/icons/ChartBarLineIcon.js +1 -1
  267. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  268. package/dist/icons/ChartBarStackedIcon.js +1 -1
  269. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  270. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  271. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  272. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  273. package/dist/icons/ChartBubbleIcon.js +1 -1
  274. package/dist/icons/ChartDonut2Icon.js +1 -1
  275. package/dist/icons/ChartFunnelIcon.js +1 -1
  276. package/dist/icons/ChartHeatmapIcon.js +1 -1
  277. package/dist/icons/ChartKPIIcon.js +1 -1
  278. package/dist/icons/ChartPie2Icon.js +1 -1
  279. package/dist/icons/ChartScatterIcon.js +1 -1
  280. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  281. package/dist/icons/CheckCircleIcon.js +1 -1
  282. package/dist/icons/CheckIcon.js +1 -1
  283. package/dist/icons/CircleFilledIcon.js +1 -1
  284. package/dist/icons/ClearIcon.js +1 -1
  285. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  286. package/dist/icons/CloseCircleIcon.js +1 -1
  287. package/dist/icons/CloseIcon.js +1 -1
  288. package/dist/icons/CodeIcon.js +1 -1
  289. package/dist/icons/ColumnTotalIcon.js +1 -1
  290. package/dist/icons/CopyIcon.js +1 -1
  291. package/dist/icons/CountIcon.js +1 -1
  292. package/dist/icons/CubeIcon.js +1 -1
  293. package/dist/icons/CubePauseIcon.js +1 -1
  294. package/dist/icons/CubePlayIcon.js +1 -1
  295. package/dist/icons/CurrencyDollarIcon.js +1 -1
  296. package/dist/icons/DangerIcon.js +1 -1
  297. package/dist/icons/DashboardIcon.js +1 -1
  298. package/dist/icons/DatabaseIcon.js +1 -1
  299. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  300. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  301. package/dist/icons/DirectionIcon.js +1 -1
  302. package/dist/icons/DonutIcon.js +1 -1
  303. package/dist/icons/DownIcon.js +1 -1
  304. package/dist/icons/EditIcon.js +1 -1
  305. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  306. package/dist/icons/ExclamationCircleIcon.js +1 -1
  307. package/dist/icons/ExclamationIcon.js +1 -1
  308. package/dist/icons/EyeIcon.js +1 -1
  309. package/dist/icons/EyeInvisibleIcon.js +1 -1
  310. package/dist/icons/FilterIcon.js +1 -1
  311. package/dist/icons/FolderFilledIcon.js +1 -1
  312. package/dist/icons/FolderIcon.js +1 -1
  313. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  314. package/dist/icons/FolderOpenIcon.js +1 -1
  315. package/dist/icons/ForwardIcon.js +1 -1
  316. package/dist/icons/GripVerticalIcon.js +1 -1
  317. package/dist/icons/HierarchyIcon.js +1 -1
  318. package/dist/icons/HierarchyOpenIcon.js +1 -1
  319. package/dist/icons/Icon.js +1 -1
  320. package/dist/icons/InfoCircleIcon.js +1 -1
  321. package/dist/icons/InfoIcon.js +1 -1
  322. package/dist/icons/KeyIcon.js +1 -1
  323. package/dist/icons/LeftIcon.js +1 -1
  324. package/dist/icons/LineChartIcon.js +1 -1
  325. package/dist/icons/LoadingIcon.js +1 -1
  326. package/dist/icons/LockFilledIcon.js +1 -1
  327. package/dist/icons/LockIcon.js +1 -1
  328. package/dist/icons/MoreIcon.js +1 -1
  329. package/dist/icons/NotAllowedIcon.js +1 -1
  330. package/dist/icons/Number123Icon.js +1 -1
  331. package/dist/icons/NumberIcon.js +1 -1
  332. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  333. package/dist/icons/PauseCircleIcon.js +1 -1
  334. package/dist/icons/PauseIcon.js +1 -1
  335. package/dist/icons/PercentageIcon.js +1 -1
  336. package/dist/icons/PieChartIcon.js +1 -1
  337. package/dist/icons/PlayCircleIcon.js +1 -1
  338. package/dist/icons/PlayIcon.js +1 -1
  339. package/dist/icons/PlusIcon.js +1 -1
  340. package/dist/icons/ProgressBarIcon.js +1 -1
  341. package/dist/icons/ReloadIcon.js +1 -1
  342. package/dist/icons/ReportIcon.js +1 -1
  343. package/dist/icons/ReturnIcon.js +1 -1
  344. package/dist/icons/RightIcon.js +1 -1
  345. package/dist/icons/RowTotalsIcon.js +1 -1
  346. package/dist/icons/SchemeIcon.js +1 -1
  347. package/dist/icons/SearchIcon.js +1 -1
  348. package/dist/icons/SemanticQueryIcon.js +1 -1
  349. package/dist/icons/SettingsIcon.js +1 -1
  350. package/dist/icons/ShieldFilledIcon.js +1 -1
  351. package/dist/icons/ShieldIcon.js +1 -1
  352. package/dist/icons/SlashIcon.js +1 -1
  353. package/dist/icons/SparklesIcon.js +1 -1
  354. package/dist/icons/SqlIcon.js +1 -1
  355. package/dist/icons/StatsIcon.js +1 -1
  356. package/dist/icons/StopIcon.js +1 -1
  357. package/dist/icons/StringIcon.js +1 -1
  358. package/dist/icons/SubtotalsIcon.js +1 -1
  359. package/dist/icons/SwitchIcon.js +1 -1
  360. package/dist/icons/TableIcon.js +1 -1
  361. package/dist/icons/ThumbsDownIcon.js +1 -1
  362. package/dist/icons/ThumbsUpIcon.js +1 -1
  363. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  364. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  365. package/dist/icons/ThunderboltIcon.js +1 -1
  366. package/dist/icons/TimeIcon.js +1 -1
  367. package/dist/icons/TrashIcon.js +1 -1
  368. package/dist/icons/UnlockIcon.js +1 -1
  369. package/dist/icons/UpIcon.js +1 -1
  370. package/dist/icons/UserGroupIcon.js +1 -1
  371. package/dist/icons/UserIcon.js +1 -1
  372. package/dist/icons/UserLockIcon.js +1 -1
  373. package/dist/icons/ViewIcon.js +1 -1
  374. package/dist/icons/WarningFilledIcon.js +1 -1
  375. package/dist/icons/WarningIcon.js +1 -1
  376. package/dist/icons/wrap-icon.js +1 -1
  377. package/dist/index.js +1 -1
  378. package/dist/provider.js +1 -1
  379. package/dist/providers/TrackingProvider.js +1 -1
  380. package/dist/providers/navigationAdapter.default.js +1 -1
  381. package/dist/tokens/base.js +1 -1
  382. package/dist/tokens/colors.js +1 -1
  383. package/dist/tokens/index.js +1 -1
  384. package/dist/tokens/layout.js +1 -1
  385. package/dist/tokens/shadows.js +1 -1
  386. package/dist/tokens/sizes.js +1 -1
  387. package/dist/tokens/spacing.js +1 -1
  388. package/dist/tokens/typography.js +1 -1
  389. package/dist/utils/ResizeSensor.js +1 -1
  390. package/dist/utils/is-dev-env.js +1 -1
  391. package/dist/utils/modules.js +1 -1
  392. package/dist/utils/promise.js +1 -1
  393. package/dist/utils/raf.js +1 -1
  394. package/dist/utils/random.js +1 -1
  395. package/dist/utils/range.js +1 -1
  396. package/dist/utils/react/RenderCache.js +1 -1
  397. package/dist/utils/react/Slots.js +1 -1
  398. package/dist/utils/react/chain.js +1 -1
  399. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  400. package/dist/utils/react/index.js +1 -1
  401. package/dist/utils/react/interactions.js +1 -1
  402. package/dist/utils/react/isTextOnly.js +1 -1
  403. package/dist/utils/react/mapProps.js +1 -1
  404. package/dist/utils/react/mergeProps.js +1 -1
  405. package/dist/utils/react/nullableValue.js +1 -1
  406. package/dist/utils/react/resolveIcon.js +1 -1
  407. package/dist/utils/react/sharedStore.js +1 -1
  408. package/dist/utils/react/useCombinedRefs.js +1 -1
  409. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  410. package/dist/utils/react/useEventBus.js +1 -1
  411. package/dist/utils/react/useId.js +1 -1
  412. package/dist/utils/react/useIsDarwin.js +1 -1
  413. package/dist/utils/react/useKeySymbols.js +1 -1
  414. package/dist/utils/react/useLayoutEffect.js +1 -1
  415. package/dist/utils/react/useLocalStorage.js +1 -1
  416. package/dist/utils/react/useMergeStyles.js +1 -1
  417. package/dist/utils/react/useQaProps.js +1 -1
  418. package/dist/utils/react/useViewportSize.js +1 -1
  419. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  420. package/dist/utils/selection.js +1 -1
  421. package/dist/utils/styles.js +1 -1
  422. package/dist/utils/tree.js +1 -1
  423. package/dist/utils/warnings.js +1 -1
  424. package/dist/version.js +2 -2
  425. package/docs/Usage.md +1 -1
  426. package/docs/components/content/Layout.md +1 -0
  427. package/docs/components/content/Result.md +33 -12
  428. package/package.json +1 -1
  429. package/docs/Result.md +0 -42
@@ -1,8 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _LayoutContainer } from "./LayoutContainer.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
5
- import { jsx } from "react/jsx-runtime";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/components/content/Layout/LayoutCenter.tsx
8
8
  const CenterElement = tasty(_LayoutContainer, {
@@ -17,12 +17,30 @@ const CenterElement = tasty(_LayoutContainer, {
17
17
  }
18
18
  }
19
19
  });
20
+ const GoldenRatioSpacerElement = tasty({
21
+ "aria-hidden": "true",
22
+ qa: "LayoutCenterGoldenRatioSpacer",
23
+ styles: {
24
+ flexGrow: {
25
+ "": .382,
26
+ "position=bottom": .618
27
+ },
28
+ flexShrink: 1,
29
+ flexBasis: 0,
30
+ minHeight: 0,
31
+ pointerEvents: "none"
32
+ }
33
+ });
20
34
  function LayoutCenter(props, ref) {
21
- const { children, ...otherProps } = props;
22
- return /* @__PURE__ */ jsx(CenterElement, {
35
+ const { children, isGoldenRatio, ...otherProps } = props;
36
+ return /* @__PURE__ */ jsxs(CenterElement, {
23
37
  ...otherProps,
24
38
  ref,
25
- children
39
+ children: [
40
+ isGoldenRatio && /* @__PURE__ */ jsx(GoldenRatioSpacerElement, { mods: { position: "top" } }),
41
+ children,
42
+ isGoldenRatio && /* @__PURE__ */ jsx(GoldenRatioSpacerElement, { mods: { position: "bottom" } })
43
+ ]
26
44
  });
27
45
  }
28
46
  const _LayoutCenter = forwardRef(LayoutCenter);
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutCenter.js","names":["LayoutContainer"],"sources":["../../../../src/components/content/Layout/LayoutCenter.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { ForwardedRef, forwardRef } from 'react';\n\nimport { CubeLayoutContainerProps, LayoutContainer } from './LayoutContainer';\n\nconst CenterElement = tasty(LayoutContainer, {\n qa: 'LayoutCenter',\n styles: {\n placeItems: 'stretch',\n placeContent: 'stretch',\n\n Inner: {\n textAlign: 'center',\n placeItems: 'center',\n placeContent: 'center',\n },\n },\n});\n\nexport interface CubeLayoutCenterProps extends CubeLayoutContainerProps {}\n\nfunction LayoutCenter(\n props: CubeLayoutCenterProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const { children, ...otherProps } = props;\n\n return (\n <CenterElement {...otherProps} ref={ref}>\n {children}\n </CenterElement>\n );\n}\n\nconst _LayoutCenter = forwardRef(LayoutCenter);\n\n_LayoutCenter.displayName = 'Layout.Center';\n\nexport { _LayoutCenter as LayoutCenter };\n"],"mappings":";;;;;;;AAKA,MAAM,gBAAgB,MAAMA,kBAAiB;CAC3C,IAAI;CACJ,QAAQ;EACN,YAAY;EACZ,cAAc;EAEd,OAAO;GACL,WAAW;GACX,YAAY;GACZ,cAAc;GACf;EACF;CACF,CAAC;AAIF,SAAS,aACP,OACA,KACA;CACA,MAAM,EAAE,UAAU,GAAG,eAAe;AAEpC,QACE,oBAAC;EAAc,GAAI;EAAiB;EACjC;GACa;;AAIpB,MAAM,gBAAgB,WAAW,aAAa;AAE9C,cAAc,cAAc"}
1
+ {"version":3,"file":"LayoutCenter.js","names":["LayoutContainer"],"sources":["../../../../src/components/content/Layout/LayoutCenter.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { ForwardedRef, forwardRef } from 'react';\n\nimport { CubeLayoutContainerProps, LayoutContainer } from './LayoutContainer';\n\nconst CenterElement = tasty(LayoutContainer, {\n qa: 'LayoutCenter',\n styles: {\n placeItems: 'stretch',\n placeContent: 'stretch',\n\n Inner: {\n textAlign: 'center',\n placeItems: 'center',\n placeContent: 'center',\n },\n },\n});\n\nconst GoldenRatioSpacerElement = tasty({\n 'aria-hidden': 'true',\n qa: 'LayoutCenterGoldenRatioSpacer',\n styles: {\n flexGrow: {\n '': 0.382,\n 'position=bottom': 0.618,\n },\n flexShrink: 1,\n flexBasis: 0,\n minHeight: 0,\n pointerEvents: 'none',\n },\n});\n\nexport interface CubeLayoutCenterProps extends CubeLayoutContainerProps {\n /**\n * Position content slightly above the visual center using the golden ratio\n * (~38.2% empty space above, ~61.8% below) for a more aesthetically pleasing\n * placement. Only takes effect while the content is smaller than the\n * container; once the content overflows, layout falls back to the default\n * centered behavior.\n * @default false\n */\n isGoldenRatio?: boolean;\n}\n\nfunction LayoutCenter(\n props: CubeLayoutCenterProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const { children, isGoldenRatio, ...otherProps } = props;\n\n return (\n <CenterElement {...otherProps} ref={ref}>\n {isGoldenRatio && <GoldenRatioSpacerElement mods={{ position: 'top' }} />}\n {children}\n {isGoldenRatio && (\n <GoldenRatioSpacerElement mods={{ position: 'bottom' }} />\n )}\n </CenterElement>\n );\n}\n\nconst _LayoutCenter = forwardRef(LayoutCenter);\n\n_LayoutCenter.displayName = 'Layout.Center';\n\nexport { _LayoutCenter as LayoutCenter };\n"],"mappings":";;;;;;;AAKA,MAAM,gBAAgB,MAAMA,kBAAiB;CAC3C,IAAI;CACJ,QAAQ;EACN,YAAY;EACZ,cAAc;EAEd,OAAO;GACL,WAAW;GACX,YAAY;GACZ,cAAc;GACf;EACF;CACF,CAAC;AAEF,MAAM,2BAA2B,MAAM;CACrC,eAAe;CACf,IAAI;CACJ,QAAQ;EACN,UAAU;GACR,IAAI;GACJ,mBAAmB;GACpB;EACD,YAAY;EACZ,WAAW;EACX,WAAW;EACX,eAAe;EAChB;CACF,CAAC;AAcF,SAAS,aACP,OACA,KACA;CACA,MAAM,EAAE,UAAU,eAAe,GAAG,eAAe;AAEnD,QACE,qBAAC;EAAc,GAAI;EAAiB;;GACjC,iBAAiB,oBAAC,4BAAyB,MAAM,EAAE,UAAU,OAAO,GAAI;GACxE;GACA,iBACC,oBAAC,4BAAyB,MAAM,EAAE,UAAU,UAAU,GAAI;;GAE9C;;AAIpB,MAAM,gBAAgB,WAAW,aAAa;AAE9C,cAAc,cAAc"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { LayoutContextReset } from "./LayoutContext.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { LayoutContextReset } from "./LayoutContext.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { createContext, useContext, useMemo, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _LayoutContent } from "./LayoutContent.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _LayoutContent } from "./LayoutContent.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { forwardRef, useMemo } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _LayoutContent } from "./LayoutContent.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { useAutoTooltip } from "../use-auto-tooltip.js";
3
3
  import { SlashIcon } from "../../../icons/SlashIcon.js";
4
4
  import { Button } from "../../actions/Button/Button.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
4
4
  import { _Item } from "../Item/Item.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _LayoutContent } from "./LayoutContent.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { useCallback, useEffect, useRef, useState } from "react";
3
3
 
4
4
  //#region src/components/content/Layout/hooks/useTinyScrollbar.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { LayoutActionsContext, LayoutContextReset, LayoutPanelContext, LayoutRefsContext, LayoutStateContext, useLayoutActionsContext, useLayoutPanelContext, useLayoutRefsContext, useLayoutStateContext } from "./LayoutContext.js";
3
3
  import { _Layout } from "./Layout.js";
4
4
  import { _LayoutContent } from "./LayoutContent.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  //#region src/components/content/Layout/utils.ts
3
3
  /**
4
4
  * Clamps a size value within min/max constraints.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { _Text } from "./Text.js";
4
4
  import { CONTAINER_STYLES, TEXT_STYLES } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { CONTAINER_STYLES, filterBaseProps, keyframes, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { RendererPrism, ensureYamlSqlExtensions } from "./prismSetup.js";
3
3
  import { CONTAINER_STYLES, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { Prism as RendererPrism } from "prism-react-renderer";
3
3
 
4
4
  //#region src/components/content/PrismCode/prismSetup.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _PrismCode } from "../PrismCode/PrismCode.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { diffLines } from "diff";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps } from "../../../utils/react/mergeProps.js";
4
4
  import { wrapNodeIfPlain } from "../../../utils/react/wrapNodeIfPlain.js";
@@ -39,6 +39,11 @@ const Container = tasty({
39
39
  "": "center",
40
40
  compact: "left"
41
41
  },
42
+ width: "max 80ch",
43
+ margin: {
44
+ "": "0 auto",
45
+ compact: "0"
46
+ },
42
47
  "--icon-size": "6x",
43
48
  Icon: {
44
49
  $: ">",
@@ -57,7 +62,8 @@ const Container = tasty({
57
62
  flow: "column",
58
63
  placeItems: "inherit",
59
64
  gap: "1x",
60
- placeSelf: "center"
65
+ placeSelf: "center",
66
+ textWrap: "balance"
61
67
  }
62
68
  }
63
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Result.js","names":["Title"],"sources":["../../../../src/components/content/Result/Result.tsx"],"sourcesContent":["import {\n IconAlertTriangleFilled,\n IconCircleCheckFilled,\n IconCircleXFilled,\n IconInfoCircleFilled,\n} from '@tabler/icons-react';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n tasty,\n} from '@tenphi/tasty';\nimport { ComponentType, forwardRef, ReactNode, useMemo } from 'react';\n\nimport { mergeProps, wrapNodeIfPlain } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { Title } from '../Title';\n\nexport interface CubeResultProps extends BaseProps, ContainerStyleProps {\n /** Additional block content. For example, a set of buttons */\n children?: ReactNode;\n /** Custom icon element */\n icon?: ReactNode;\n /**\n * Result status from ready-made templates\n * @default 'info'\n */\n status?: CubeResultStatus;\n /**\n * The subTitle\n * @deprecated The subTitle prop is deprecated and will be removed in next major release. consider using subtitle instead\n */\n subTitle?: ReactNode;\n /**\n * Subtitle of the Result component\n */\n subtitle?: ReactNode;\n /** The title */\n title?: ReactNode;\n /** Whether the result component has a compact presentation */\n isCompact?: boolean;\n}\n\nexport type CubeResultStatus =\n | 'success'\n | 'error'\n | 'info'\n | 'warning'\n | 404\n | 403\n | 500;\n\ntype StatusIconMap = Record<\n CubeResultStatus,\n {\n color: string;\n component: ComponentType;\n }\n>;\n\nconst Container = tasty({\n qa: 'ResultContainer',\n as: 'section',\n styles: {\n display: {\n '': 'flex',\n compact: 'grid',\n },\n gridAreas: '\"icon title\" \"content content\"',\n flow: 'column',\n placeContent: {\n '': 'center',\n compact: 'start',\n },\n placeItems: {\n '': 'center',\n compact: 'start',\n },\n gap: {\n '': '3x',\n compact: '2x 1x',\n },\n padding: {\n '': '6x 4x',\n compact: '0',\n },\n textAlign: {\n '': 'center',\n compact: 'left',\n },\n '--icon-size': '6x',\n\n Icon: {\n $: '>',\n display: 'grid',\n gridArea: 'icon',\n },\n\n Content: {\n $: '>',\n gridArea: 'content',\n display: 'block',\n },\n\n Title: {\n $: '>',\n gridArea: 'title',\n display: 'flex',\n flow: 'column',\n placeItems: 'inherit',\n gap: '1x',\n placeSelf: 'center',\n },\n },\n});\n\nconst statusIconMap: StatusIconMap = {\n success: {\n color: 'success',\n component: () => <IconCircleCheckFilled />,\n },\n error: {\n color: 'danger',\n component: () => <IconCircleXFilled />,\n },\n info: {\n color: 'purple',\n component: () => <IconInfoCircleFilled />,\n },\n warning: {\n color: 'warning',\n component: () => <IconAlertTriangleFilled />,\n },\n 404: {\n color: 'purple',\n component: () => {\n // TODO: Needs to be implemented in the future\n return null;\n },\n },\n 403: {\n color: 'purple',\n component: () => {\n // TODO: Needs to be implemented in the future\n return null;\n },\n },\n 500: {\n color: 'purple',\n component: () => {\n // TODO: Needs to be implemented in the future\n return null;\n },\n },\n};\n\nfunction Result(props: CubeResultProps, ref) {\n let {\n children,\n isCompact,\n icon,\n status,\n subTitle,\n subtitle,\n title,\n ...otherProps\n } = props;\n\n subtitle = subtitle ?? subTitle;\n\n if (icon && status) {\n console.warn(\n 'Don\\'t use \"icon\" and \"status\" together, it can lead to possible errors.',\n );\n }\n\n const iconNode = useMemo(() => {\n if (icon) {\n return icon;\n }\n\n const { color, component: Component } =\n status && statusIconMap.hasOwnProperty(status)\n ? statusIconMap[status]\n : statusIconMap.info;\n\n return (\n <div data-element=\"Icon\" style={{ color: `var(--${color}-color)` }}>\n <Component data-element=\"Icon\" />\n </div>\n );\n }, [icon, status]);\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n return (\n <Container\n {...mergeProps(filterBaseProps(otherProps, { eventProps: true }), {\n mods: { compact: isCompact },\n })}\n ref={ref}\n styles={styles}\n >\n {iconNode}\n {(title || subtitle) && (\n <div data-element=\"Title\">\n {wrapNodeIfPlain(title, () => (\n <Title level={2} preset={isCompact ? 'h5' : 'h4'}>\n {title}\n </Title>\n ))}\n {wrapNodeIfPlain(subtitle, () => (\n <Title level={3} preset={isCompact ? 't3m' : 't2m'}>\n {subtitle}\n </Title>\n ))}\n </div>\n )}\n {children && <div data-element=\"Content\">{children}</div>}\n </Container>\n );\n}\n\nconst _Result = forwardRef(Result);\n\n_Result.displayName = 'Result';\n\nexport { _Result as Result };\n"],"mappings":";;;;;;;;;;;AA6DA,MAAM,YAAY,MAAM;CACtB,IAAI;CACJ,IAAI;CACJ,QAAQ;EACN,SAAS;GACP,IAAI;GACJ,SAAS;GACV;EACD,WAAW;EACX,MAAM;EACN,cAAc;GACZ,IAAI;GACJ,SAAS;GACV;EACD,YAAY;GACV,IAAI;GACJ,SAAS;GACV;EACD,KAAK;GACH,IAAI;GACJ,SAAS;GACV;EACD,SAAS;GACP,IAAI;GACJ,SAAS;GACV;EACD,WAAW;GACT,IAAI;GACJ,SAAS;GACV;EACD,eAAe;EAEf,MAAM;GACJ,GAAG;GACH,SAAS;GACT,UAAU;GACX;EAED,SAAS;GACP,GAAG;GACH,UAAU;GACV,SAAS;GACV;EAED,OAAO;GACL,GAAG;GACH,UAAU;GACV,SAAS;GACT,MAAM;GACN,YAAY;GACZ,KAAK;GACL,WAAW;GACZ;EACF;CACF,CAAC;AAEF,MAAM,gBAA+B;CACnC,SAAS;EACP,OAAO;EACP,iBAAiB,oBAAC,0BAAwB;EAC3C;CACD,OAAO;EACL,OAAO;EACP,iBAAiB,oBAAC,sBAAoB;EACvC;CACD,MAAM;EACJ,OAAO;EACP,iBAAiB,oBAAC,yBAAuB;EAC1C;CACD,SAAS;EACP,OAAO;EACP,iBAAiB,oBAAC,4BAA0B;EAC7C;CACD,KAAK;EACH,OAAO;EACP,iBAAiB;AAEf,UAAO;;EAEV;CACD,KAAK;EACH,OAAO;EACP,iBAAiB;AAEf,UAAO;;EAEV;CACD,KAAK;EACH,OAAO;EACP,iBAAiB;AAEf,UAAO;;EAEV;CACF;AAED,SAAS,OAAO,OAAwB,KAAK;CAC3C,IAAI,EACF,UACA,WACA,MACA,QACA,UACA,UACA,OACA,GAAG,eACD;AAEJ,YAAW,YAAY;AAEvB,KAAI,QAAQ,OACV,SAAQ,KACN,8EACD;CAGH,MAAM,WAAW,cAAc;AAC7B,MAAI,KACF,QAAO;EAGT,MAAM,EAAE,OAAO,WAAW,cACxB,UAAU,cAAc,eAAe,OAAO,GAC1C,cAAc,UACd,cAAc;AAEpB,SACE,oBAAC;GAAI,gBAAa;GAAO,OAAO,EAAE,OAAO,SAAS,MAAM,UAAU;aAChE,oBAAC,aAAU,gBAAa,SAAS;IAC7B;IAEP,CAAC,MAAM,OAAO,CAAC;CAElB,MAAM,SAAS,cAAc,YAAY,iBAAiB;AAE1D,QACE,qBAAC;EACC,GAAI,WAAW,gBAAgB,YAAY,EAAE,YAAY,MAAM,CAAC,EAAE,EAChE,MAAM,EAAE,SAAS,WAAW,EAC7B,CAAC;EACG;EACG;;GAEP;IACC,SAAS,aACT,qBAAC;IAAI,gBAAa;eACf,gBAAgB,aACf,oBAACA;KAAM,OAAO;KAAG,QAAQ,YAAY,OAAO;eACzC;MACK,CACR,EACD,gBAAgB,gBACf,oBAACA;KAAM,OAAO;KAAG,QAAQ,YAAY,QAAQ;eAC1C;MACK,CACR;KACE;GAEP,YAAY,oBAAC;IAAI,gBAAa;IAAW;KAAe;;GAC/C;;AAIhB,MAAM,UAAU,WAAW,OAAO;AAElC,QAAQ,cAAc"}
1
+ {"version":3,"file":"Result.js","names":["Title"],"sources":["../../../../src/components/content/Result/Result.tsx"],"sourcesContent":["import {\n IconAlertTriangleFilled,\n IconCircleCheckFilled,\n IconCircleXFilled,\n IconInfoCircleFilled,\n} from '@tabler/icons-react';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n tasty,\n} from '@tenphi/tasty';\nimport { ComponentType, forwardRef, ReactNode, useMemo } from 'react';\n\nimport { mergeProps, wrapNodeIfPlain } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { Title } from '../Title';\n\nexport interface CubeResultProps extends BaseProps, ContainerStyleProps {\n /** Additional block content. For example, a set of buttons */\n children?: ReactNode;\n /** Custom icon element */\n icon?: ReactNode;\n /**\n * Result status from ready-made templates\n * @default 'info'\n */\n status?: CubeResultStatus;\n /**\n * The subTitle\n * @deprecated The subTitle prop is deprecated and will be removed in next major release. consider using subtitle instead\n */\n subTitle?: ReactNode;\n /**\n * Subtitle of the Result component\n */\n subtitle?: ReactNode;\n /** The title */\n title?: ReactNode;\n /** Whether the result component has a compact presentation */\n isCompact?: boolean;\n}\n\nexport type CubeResultStatus =\n | 'success'\n | 'error'\n | 'info'\n | 'warning'\n | 404\n | 403\n | 500;\n\ntype StatusIconMap = Record<\n CubeResultStatus,\n {\n color: string;\n component: ComponentType;\n }\n>;\n\nconst Container = tasty({\n qa: 'ResultContainer',\n as: 'section',\n styles: {\n display: {\n '': 'flex',\n compact: 'grid',\n },\n gridAreas: '\"icon title\" \"content content\"',\n flow: 'column',\n placeContent: {\n '': 'center',\n compact: 'start',\n },\n placeItems: {\n '': 'center',\n compact: 'start',\n },\n gap: {\n '': '3x',\n compact: '2x 1x',\n },\n padding: {\n '': '6x 4x',\n compact: '0',\n },\n textAlign: {\n '': 'center',\n compact: 'left',\n },\n width: 'max 80ch',\n margin: {\n '': '0 auto',\n compact: '0',\n },\n '--icon-size': '6x',\n\n Icon: {\n $: '>',\n display: 'grid',\n gridArea: 'icon',\n },\n\n Content: {\n $: '>',\n gridArea: 'content',\n display: 'block',\n },\n\n Title: {\n $: '>',\n gridArea: 'title',\n display: 'flex',\n flow: 'column',\n placeItems: 'inherit',\n gap: '1x',\n placeSelf: 'center',\n textWrap: 'balance',\n },\n },\n});\n\nconst statusIconMap: StatusIconMap = {\n success: {\n color: 'success',\n component: () => <IconCircleCheckFilled />,\n },\n error: {\n color: 'danger',\n component: () => <IconCircleXFilled />,\n },\n info: {\n color: 'purple',\n component: () => <IconInfoCircleFilled />,\n },\n warning: {\n color: 'warning',\n component: () => <IconAlertTriangleFilled />,\n },\n 404: {\n color: 'purple',\n component: () => {\n // TODO: Needs to be implemented in the future\n return null;\n },\n },\n 403: {\n color: 'purple',\n component: () => {\n // TODO: Needs to be implemented in the future\n return null;\n },\n },\n 500: {\n color: 'purple',\n component: () => {\n // TODO: Needs to be implemented in the future\n return null;\n },\n },\n};\n\nfunction Result(props: CubeResultProps, ref) {\n let {\n children,\n isCompact,\n icon,\n status,\n subTitle,\n subtitle,\n title,\n ...otherProps\n } = props;\n\n subtitle = subtitle ?? subTitle;\n\n if (icon && status) {\n console.warn(\n 'Don\\'t use \"icon\" and \"status\" together, it can lead to possible errors.',\n );\n }\n\n const iconNode = useMemo(() => {\n if (icon) {\n return icon;\n }\n\n const { color, component: Component } =\n status && statusIconMap.hasOwnProperty(status)\n ? statusIconMap[status]\n : statusIconMap.info;\n\n return (\n <div data-element=\"Icon\" style={{ color: `var(--${color}-color)` }}>\n <Component data-element=\"Icon\" />\n </div>\n );\n }, [icon, status]);\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n return (\n <Container\n {...mergeProps(filterBaseProps(otherProps, { eventProps: true }), {\n mods: { compact: isCompact },\n })}\n ref={ref}\n styles={styles}\n >\n {iconNode}\n {(title || subtitle) && (\n <div data-element=\"Title\">\n {wrapNodeIfPlain(title, () => (\n <Title level={2} preset={isCompact ? 'h5' : 'h4'}>\n {title}\n </Title>\n ))}\n {wrapNodeIfPlain(subtitle, () => (\n <Title level={3} preset={isCompact ? 't3m' : 't2m'}>\n {subtitle}\n </Title>\n ))}\n </div>\n )}\n {children && <div data-element=\"Content\">{children}</div>}\n </Container>\n );\n}\n\nconst _Result = forwardRef(Result);\n\n_Result.displayName = 'Result';\n\nexport { _Result as Result };\n"],"mappings":";;;;;;;;;;;AA6DA,MAAM,YAAY,MAAM;CACtB,IAAI;CACJ,IAAI;CACJ,QAAQ;EACN,SAAS;GACP,IAAI;GACJ,SAAS;GACV;EACD,WAAW;EACX,MAAM;EACN,cAAc;GACZ,IAAI;GACJ,SAAS;GACV;EACD,YAAY;GACV,IAAI;GACJ,SAAS;GACV;EACD,KAAK;GACH,IAAI;GACJ,SAAS;GACV;EACD,SAAS;GACP,IAAI;GACJ,SAAS;GACV;EACD,WAAW;GACT,IAAI;GACJ,SAAS;GACV;EACD,OAAO;EACP,QAAQ;GACN,IAAI;GACJ,SAAS;GACV;EACD,eAAe;EAEf,MAAM;GACJ,GAAG;GACH,SAAS;GACT,UAAU;GACX;EAED,SAAS;GACP,GAAG;GACH,UAAU;GACV,SAAS;GACV;EAED,OAAO;GACL,GAAG;GACH,UAAU;GACV,SAAS;GACT,MAAM;GACN,YAAY;GACZ,KAAK;GACL,WAAW;GACX,UAAU;GACX;EACF;CACF,CAAC;AAEF,MAAM,gBAA+B;CACnC,SAAS;EACP,OAAO;EACP,iBAAiB,oBAAC,0BAAwB;EAC3C;CACD,OAAO;EACL,OAAO;EACP,iBAAiB,oBAAC,sBAAoB;EACvC;CACD,MAAM;EACJ,OAAO;EACP,iBAAiB,oBAAC,yBAAuB;EAC1C;CACD,SAAS;EACP,OAAO;EACP,iBAAiB,oBAAC,4BAA0B;EAC7C;CACD,KAAK;EACH,OAAO;EACP,iBAAiB;AAEf,UAAO;;EAEV;CACD,KAAK;EACH,OAAO;EACP,iBAAiB;AAEf,UAAO;;EAEV;CACD,KAAK;EACH,OAAO;EACP,iBAAiB;AAEf,UAAO;;EAEV;CACF;AAED,SAAS,OAAO,OAAwB,KAAK;CAC3C,IAAI,EACF,UACA,WACA,MACA,QACA,UACA,UACA,OACA,GAAG,eACD;AAEJ,YAAW,YAAY;AAEvB,KAAI,QAAQ,OACV,SAAQ,KACN,8EACD;CAGH,MAAM,WAAW,cAAc;AAC7B,MAAI,KACF,QAAO;EAGT,MAAM,EAAE,OAAO,WAAW,cACxB,UAAU,cAAc,eAAe,OAAO,GAC1C,cAAc,UACd,cAAc;AAEpB,SACE,oBAAC;GAAI,gBAAa;GAAO,OAAO,EAAE,OAAO,SAAS,MAAM,UAAU;aAChE,oBAAC,aAAU,gBAAa,SAAS;IAC7B;IAEP,CAAC,MAAM,OAAO,CAAC;CAElB,MAAM,SAAS,cAAc,YAAY,iBAAiB;AAE1D,QACE,qBAAC;EACC,GAAI,WAAW,gBAAgB,YAAY,EAAE,YAAY,MAAM,CAAC,EAAE,EAChE,MAAM,EAAE,SAAS,WAAW,EAC7B,CAAC;EACG;EACG;;GAEP;IACC,SAAS,aACT,qBAAC;IAAI,gBAAa;eACf,gBAAgB,aACf,oBAACA;KAAM,OAAO;KAAG,QAAQ,YAAY,OAAO;eACzC;MACK,CACR,EACD,gBAAgB,gBACf,oBAACA;KAAM,OAAO;KAAG,QAAQ,YAAY,QAAQ;eAC1C;MACK,CACR;KACE;GAEP,YAAY,oBAAC;IAAI,gBAAa;IAAW;KAAe;;GAC/C;;AAIhB,MAAM,UAAU,WAAW,OAAO;AAElC,QAAQ,cAAc"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { Space } from "../../layout/Space.js";
3
3
  import { Grid } from "../../layout/Grid.js";
4
4
  import { Flow } from "../../layout/Flow.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _Item } from "../Item/Item.js";
3
3
  import { CloseIcon } from "../../../icons/CloseIcon.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -141,7 +141,7 @@ declare const MinorText: react.ComponentType<{
141
141
  accessKey?: string | undefined;
142
142
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
143
143
  autoFocus?: boolean | undefined;
144
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
144
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
145
145
  contextMenu?: string | undefined;
146
146
  dir?: string | undefined;
147
147
  draggable?: (boolean | "true" | "false") | undefined;
@@ -550,7 +550,7 @@ declare const DangerText: react.ComponentType<{
550
550
  accessKey?: string | undefined;
551
551
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
552
552
  autoFocus?: boolean | undefined;
553
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
553
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
554
554
  contextMenu?: string | undefined;
555
555
  dir?: string | undefined;
556
556
  draggable?: (boolean | "true" | "false") | undefined;
@@ -959,7 +959,7 @@ declare const SuccessText: react.ComponentType<{
959
959
  accessKey?: string | undefined;
960
960
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
961
961
  autoFocus?: boolean | undefined;
962
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
962
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
963
963
  contextMenu?: string | undefined;
964
964
  dir?: string | undefined;
965
965
  draggable?: (boolean | "true" | "false") | undefined;
@@ -1368,7 +1368,7 @@ declare const StrongText: react.ComponentType<{
1368
1368
  accessKey?: string | undefined;
1369
1369
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
1370
1370
  autoFocus?: boolean | undefined;
1371
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
1371
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
1372
1372
  contextMenu?: string | undefined;
1373
1373
  dir?: string | undefined;
1374
1374
  draggable?: (boolean | "true" | "false") | undefined;
@@ -1777,7 +1777,7 @@ declare const EmphasisText: react.ComponentType<{
1777
1777
  accessKey?: string | undefined;
1778
1778
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
1779
1779
  autoFocus?: boolean | undefined;
1780
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
1780
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
1781
1781
  contextMenu?: string | undefined;
1782
1782
  dir?: string | undefined;
1783
1783
  draggable?: (boolean | "true" | "false") | undefined;
@@ -2186,7 +2186,7 @@ declare const PlaceholderText: react.ComponentType<{
2186
2186
  accessKey?: string | undefined;
2187
2187
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
2188
2188
  autoFocus?: boolean | undefined;
2189
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
2189
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
2190
2190
  contextMenu?: string | undefined;
2191
2191
  dir?: string | undefined;
2192
2192
  draggable?: (boolean | "true" | "false") | undefined;
@@ -2595,7 +2595,7 @@ declare const HighlightText: react.ComponentType<{
2595
2595
  accessKey?: string | undefined;
2596
2596
  autoCapitalize?: (string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters" | undefined;
2597
2597
  autoFocus?: boolean | undefined;
2598
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
2598
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
2599
2599
  contextMenu?: string | undefined;
2600
2600
  dir?: string | undefined;
2601
2601
  draggable?: (boolean | "true" | "false") | undefined;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useSlotProps } from "../../utils/react/Slots.js";
4
4
  import { BASE_STYLES, COLOR_STYLES, TEXT_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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";
@@ -236,15 +236,65 @@ function TreeBase(props, ref) {
236
236
  width: "100%",
237
237
  height: `${rowVirtualizer.getTotalSize()}px`
238
238
  }), [rowVirtualizer.getTotalSize()]);
239
+ /**
240
+ * Each scroll effect tracks its own "last scrolled" target instead
241
+ * of sharing one ref. A shared ref creates a feedback loop: keyboard
242
+ * nav updates the focused-key ref to the new row, and any subsequent
243
+ * `visibleNodes` change OR `selectedKeys` array-identity change
244
+ * (very common — `selectedKeys={[value]}` allocates a fresh array
245
+ * every parent render) re-runs the selectedKeys effect, which sees
246
+ * the ref no longer matches `selectedKeys[0]` and yanks the viewport
247
+ * back to the selected row. Two refs let each effect dedupe against
248
+ * its own intent only; the cost is at most one duplicate
249
+ * `scrollToIndex` call when click updates focus and selection in the
250
+ * same render (idempotent — both target the same index).
251
+ */
252
+ const lastFocusedScrollRef = useRef(null);
253
+ const lastSelectedScrollRef = useRef(null);
254
+ /**
255
+ * Keep the focused row visible during keyboard navigation.
256
+ *
257
+ * Uses `rowVirtualizer.scrollToIndex` (instead of
258
+ * `querySelector + scrollIntoView`) so the scroll lands even when the
259
+ * target row is outside the virtualizer's currently rendered window.
260
+ * `align: 'auto'` only scrolls when needed, matching the prior
261
+ * `scrollIntoView({ block: 'nearest' })` behavior.
262
+ */
239
263
  useLayoutEffect(() => {
240
264
  const focusedKey = state.selectionManager.focusedKey;
241
265
  if (focusedKey == null) return;
242
- const scrollElement = scrollRef.current;
243
- if (!scrollElement) return;
244
- const row = scrollElement.querySelector(`[data-qa-key="${CSS.escape(String(focusedKey))}"]`);
245
- if (!row || typeof row.scrollIntoView !== "function") return;
246
- row.scrollIntoView({ block: "nearest" });
247
- }, [state.selectionManager.focusedKey]);
266
+ if (lastFocusedScrollRef.current === focusedKey) return;
267
+ const index = visibleNodesRef.current.findIndex((n) => n.key === focusedKey);
268
+ if (index < 0) return;
269
+ rowVirtualizer.scrollToIndex(index, { align: "auto" });
270
+ lastFocusedScrollRef.current = focusedKey;
271
+ }, [state.selectionManager.focusedKey, rowVirtualizer]);
272
+ /**
273
+ * Scroll into view when controlled `selectedKeys` changes externally.
274
+ *
275
+ * Selection-manager `focusedKey` only updates on explicit user
276
+ * interaction (click / keyboard) — it does NOT track controlled
277
+ * `selectedKeys` prop changes. So when a parent updates the prop
278
+ * (e.g. opening a file from elsewhere), we need a separate effect
279
+ * to bring the row into view.
280
+ *
281
+ * Re-runs on `visibleNodes` so we retry once parents are expanded
282
+ * (the row is invisible to the virtualizer until then).
283
+ */
284
+ useLayoutEffect(() => {
285
+ if (selectedKeys == null) return;
286
+ const target = selectedKeys[0];
287
+ if (target == null) return;
288
+ if (lastSelectedScrollRef.current === target) return;
289
+ const index = visibleNodes.findIndex((n) => String(n.key) === target);
290
+ if (index < 0) return;
291
+ rowVirtualizer.scrollToIndex(index, { align: "auto" });
292
+ lastSelectedScrollRef.current = target;
293
+ }, [
294
+ selectedKeys,
295
+ visibleNodes,
296
+ rowVirtualizer
297
+ ]);
248
298
  const mods = useMemo(() => ({
249
299
  "has-height": height != null,
250
300
  shape
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.js","names":[],"sources":["../../../../src/components/content/Tree/Tree.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { OUTER_STYLES } from '@tenphi/tasty';\nimport { forwardRef, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useTree } from 'react-aria';\nimport { Item, useTreeState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { SIZE_NAME_TO_KEY, SIZES } from '../../../tokens/sizes';\nimport { mergeRefs } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n\nimport { TreeElement, TreeScrollContainer } from './styled';\nimport { buildTreeIndex } from './tree-index';\nimport { TreeNode } from './TreeNode';\nimport { useCheckboxTree } from './use-checkbox-tree';\nimport { useLoadData } from './use-load-data';\n\nimport type { Key, Node, Selection } from '@react-types/shared';\nimport type {\n CSSProperties,\n ForwardedRef,\n ReactElement,\n ReactNode,\n} from 'react';\nimport type {\n CubeTreeNodeData,\n CubeTreeProps,\n TreeOnExpandInfo,\n TreeOnSelectInfo,\n TreeSelectionMode,\n} from './types';\n\n/**\n * Render an `<Item>` for React Stately's collection builder.\n *\n * The visible content is rendered by `TreeNode` via `nodesByKey`,\n * so `<Item>`'s body is only used by Stately for the collection\n * (`textValue` for keyboard nav, `childItems` for nested traversal).\n */\nfunction renderItem(node: CubeTreeNodeData): ReactElement {\n const textValue =\n typeof node.title === 'string' ? node.title : String(node.key);\n return (\n <Item\n key={node.key}\n textValue={textValue}\n childItems={node.children as CubeTreeNodeData[] | undefined}\n >\n {node.title as ReactNode}\n </Item>\n );\n}\n\nfunction collectDisabledKeys(\n treeData: CubeTreeNodeData[],\n treeIsDisabled: boolean,\n): string[] {\n const keys: string[] = [];\n const visit = (nodes: CubeTreeNodeData[]) => {\n for (const node of nodes) {\n if (treeIsDisabled || node.isDisabled) keys.push(node.key);\n if (node.children) visit(node.children);\n }\n };\n visit(treeData);\n return keys;\n}\n\n/** Expand the supplied keys with all of their ancestor keys. */\nfunction expandWithParents(\n keys: string[] | undefined,\n parentOf: Map<string, string | null>,\n): string[] | undefined {\n if (!keys || keys.length === 0) return keys;\n const set = new Set<string>(keys);\n for (const key of keys) {\n let parent = parentOf.get(key);\n while (parent) {\n set.add(parent);\n parent = parentOf.get(parent);\n }\n }\n return Array.from(set);\n}\n\n/**\n * Diff two key sets to find the single key that was added or removed.\n * Returns `null` when both sets are equal.\n */\nfunction findToggledKey(\n previous: Set<Key>,\n next: Set<Key>,\n): { key: Key; added: boolean } | null {\n for (const k of next) {\n if (!previous.has(k)) return { key: k, added: true };\n }\n for (const k of previous) {\n if (!next.has(k)) return { key: k, added: false };\n }\n return null;\n}\n\nfunction resolveSelectionMode(\n selectionMode: TreeSelectionMode | undefined,\n isSelectable: boolean | undefined,\n): TreeSelectionMode {\n if (selectionMode != null) return selectionMode;\n if (isSelectable === false) return 'none';\n return 'single';\n}\n\nfunction TreeBase(props: CubeTreeProps, ref: ForwardedRef<HTMLDivElement>) {\n const {\n treeData,\n isCheckable = false,\n isSelectable,\n selectionMode: selectionModeProp,\n size = 'medium',\n shape = 'default',\n containerPadding = 4,\n isDisabled = false,\n defaultExpandedKeys,\n expandedKeys,\n autoExpandParent = false,\n defaultCheckedKeys,\n checkedKeys,\n defaultSelectedKeys,\n selectedKeys,\n height,\n loadData,\n onExpand,\n onCheck,\n onSelect,\n itemProps,\n rowStyles,\n ariaLabel,\n qa,\n menu: treeMenu,\n contextMenu: treeContextMenu,\n onAction: treeOnAction,\n menuTriggerProps,\n menuProps,\n ...otherProps\n } = props;\n\n const baseStyles = extractStyles(otherProps, OUTER_STYLES);\n\n const treeRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const treeIndex = useMemo(() => buildTreeIndex(treeData), [treeData]);\n const nodesByKey = treeIndex.byKey;\n const parentOf = treeIndex.parentOf;\n\n const disabledKeys = useMemo(\n () => collectDisabledKeys(treeData, isDisabled),\n [treeData, isDisabled],\n );\n\n const selectionMode = resolveSelectionMode(selectionModeProp, isSelectable);\n\n const effectiveExpandedKeys = useMemo(\n () =>\n autoExpandParent\n ? expandWithParents(expandedKeys, parentOf)\n : expandedKeys,\n [autoExpandParent, expandedKeys, parentOf],\n );\n\n const effectiveDefaultExpandedKeys = useMemo(\n () =>\n autoExpandParent\n ? expandWithParents(defaultExpandedKeys, parentOf)\n : defaultExpandedKeys,\n [autoExpandParent, defaultExpandedKeys, parentOf],\n );\n\n const checkbox = useCheckboxTree({\n treeData,\n index: treeIndex,\n isCheckable,\n defaultCheckedKeys,\n checkedKeys,\n onCheck,\n });\n\n const loadDataController = useLoadData({\n nodesByKey,\n loadData,\n initialExpandedKeys: effectiveExpandedKeys ?? effectiveDefaultExpandedKeys,\n });\n\n /**\n * In controlled mode, `previous` is read from `effectiveExpandedKeys`;\n * in uncontrolled mode this ref is the only source. Initialized from\n * the *effective* (ancestor-expanded) keys so the first toggle diffs\n * correctly.\n */\n const previousExpandedRef = useRef<Set<Key>>(\n new Set<Key>(effectiveExpandedKeys ?? effectiveDefaultExpandedKeys ?? []),\n );\n\n const handleExpandedChange = useEvent((nextSet: Set<Key>) => {\n loadDataController.onExpandedChanged(nextSet);\n\n const previous =\n expandedKeys !== undefined\n ? new Set<Key>(effectiveExpandedKeys ?? [])\n : previousExpandedRef.current;\n previousExpandedRef.current = new Set<Key>(nextSet);\n\n if (!onExpand) return;\n\n const toggled = findToggledKey(previous, nextSet);\n if (!toggled) return;\n\n const node = nodesByKey.get(String(toggled.key));\n if (!node) return;\n\n const info: TreeOnExpandInfo = {\n expanded: toggled.added,\n node,\n };\n onExpand(Array.from(nextSet), info);\n });\n\n /**\n * Same pattern as `previousExpandedRef`: in controlled mode we read\n * from `selectedKeys`; in uncontrolled mode this ref tracks state.\n */\n const previousSelectionRef = useRef<Set<Key>>(\n new Set<Key>(selectedKeys ?? defaultSelectedKeys ?? []),\n );\n\n /**\n * `useEvent` captures the closure lazily, so `state` (declared below\n * `ariaProps` / `useTreeState`) is safely accessible at call time.\n */\n const handleSelectionChange = useEvent((selection: Selection) => {\n if (!onSelect) return;\n let arr: Key[];\n if (selection === 'all') {\n // `nodesByKey` contains the full tree; use the collection's visible\n // keys so we don't leak keys under collapsed parents.\n arr = [];\n for (const key of state.collection.getKeys()) {\n const node = state.collection.getItem(key);\n if (node && node.type === 'item') arr.push(key);\n }\n } else {\n arr = Array.from(selection);\n }\n\n const nextSet = new Set<Key>(arr);\n const previous =\n selectedKeys !== undefined\n ? new Set<Key>(selectedKeys ?? [])\n : previousSelectionRef.current;\n previousSelectionRef.current = nextSet;\n\n const toggled = findToggledKey(previous, nextSet);\n if (!toggled) return;\n\n const node = nodesByKey.get(String(toggled.key));\n if (!node) return;\n\n const selectedNodes = arr\n .map((k) => nodesByKey.get(String(k)))\n .filter((n): n is CubeTreeNodeData => !!n);\n\n const info: TreeOnSelectInfo = {\n selected: toggled.added,\n node,\n selectedNodes,\n };\n\n onSelect(arr, info);\n });\n\n const hasOnSelect = onSelect != null;\n\n const ariaProps = useMemo(\n () => ({\n selectionMode,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange:\n hasOnSelect && selectionMode !== 'none'\n ? handleSelectionChange\n : undefined,\n expandedKeys: effectiveExpandedKeys,\n defaultExpandedKeys: effectiveDefaultExpandedKeys,\n onExpandedChange: handleExpandedChange,\n disabledKeys,\n disabledBehavior: 'all' as const,\n items: treeData,\n children: renderItem as any,\n 'aria-label': ariaLabel ?? 'Tree',\n }),\n [\n selectionMode,\n selectedKeys,\n defaultSelectedKeys,\n hasOnSelect,\n handleSelectionChange,\n effectiveExpandedKeys,\n effectiveDefaultExpandedKeys,\n handleExpandedChange,\n disabledKeys,\n treeData,\n ariaLabel,\n ],\n );\n\n const baseState = useTreeState<CubeTreeNodeData>(ariaProps);\n\n // The legacy `TreeCollection` from `useTreeState` lacks `getChildren`,\n // but `useTree` calls it for nested rows. Derive a patched state.\n // TODO: Remove this patch when upgrading to a react-stately version\n // that ships `getChildren` on TreeCollection natively.\n const state = useMemo(() => {\n const collection = baseState.collection;\n if (typeof (collection as any).getChildren === 'function') {\n return baseState;\n }\n const patched = Object.create(collection);\n patched.getChildren = (key: Key): Iterable<Node<CubeTreeNodeData>> => {\n const node = collection.getItem(key);\n return node ? Array.from(node.childNodes) : [];\n };\n return { ...baseState, collection: patched };\n }, [baseState]);\n\n const { gridProps } = useTree(ariaProps, state, treeRef);\n\n const visibleNodes: Node<CubeTreeNodeData>[] = useMemo(() => {\n const out: Node<CubeTreeNodeData>[] = [];\n for (const key of state.collection.getKeys()) {\n const node = state.collection.getItem(key);\n if (node && node.type === 'item') out.push(node);\n }\n return out;\n }, [state.collection]);\n\n const visibleNodesRef = useRef(visibleNodes);\n visibleNodesRef.current = visibleNodes;\n\n // ----- Virtualization -----\n const rowVirtualizer = useVirtualizer({\n count: visibleNodes.length,\n getScrollElement: () => scrollRef.current,\n getItemKey: (index: number) => {\n const node = visibleNodesRef.current[index];\n return node?.key ?? index;\n },\n estimateSize: () => SIZES[SIZE_NAME_TO_KEY[size]],\n gap: 1,\n overscan: 10,\n paddingStart: containerPadding,\n paddingEnd: containerPadding,\n });\n\n const treeStyle = useMemo<CSSProperties | undefined>(() => {\n if (height == null) return undefined;\n return { ['--tree-height' as keyof CSSProperties]: `${height}px` };\n }, [height]);\n\n const sizerStyle = useMemo<CSSProperties>(\n () => ({\n position: 'relative',\n width: '100%',\n height: `${rowVirtualizer.getTotalSize()}px`,\n }),\n [rowVirtualizer.getTotalSize()],\n );\n\n // Keep focused node visible during keyboard navigation.\n useLayoutEffect(() => {\n const focusedKey = state.selectionManager.focusedKey;\n if (focusedKey == null) return;\n\n const scrollElement = scrollRef.current;\n if (!scrollElement) return;\n\n const row = scrollElement.querySelector(\n `[data-qa-key=\"${CSS.escape(String(focusedKey))}\"]`,\n ) as HTMLElement | null;\n if (!row || typeof row.scrollIntoView !== 'function') return;\n\n row.scrollIntoView({ block: 'nearest' });\n }, [state.selectionManager.focusedKey]);\n\n const mods = useMemo(\n () => ({\n 'has-height': height != null,\n shape,\n }),\n [height, shape],\n );\n\n // The forwarded ref points at the inner scroll container so\n // consumers can drive `scrollTop` directly. `treeRef` (used by\n // `useTree` for keyboard handling and as the role=\"treegrid\"\n // anchor) stays internal on `TreeElement`.\n const mergedScrollRef = useMemo(\n () => mergeRefs(ref, scrollRef),\n [ref, scrollRef],\n );\n\n return (\n <TreeElement\n {...gridProps}\n ref={treeRef}\n qa={qa ?? 'Tree'}\n mods={mods}\n styles={baseStyles}\n style={treeStyle}\n >\n <TreeScrollContainer ref={mergedScrollRef}>\n <div role=\"presentation\" style={sizerStyle}>\n {rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const node = visibleNodes[virtualItem.index];\n if (!node) return null;\n const keyStr = String(node.key);\n const data = nodesByKey.get(keyStr);\n if (!data) return null;\n return (\n <TreeNode\n key={node.key}\n node={node}\n data={data}\n state={state}\n isCheckable={isCheckable}\n isExpanded={state.expandedKeys.has(node.key)}\n isChecked={checkbox.checkedSet.has(keyStr)}\n isIndeterminate={checkbox.halfCheckedSet.has(keyStr)}\n isLoading={loadDataController.loadingKeys.has(keyStr)}\n size={size}\n itemProps={itemProps}\n rowStyles={rowStyles}\n virtualStyle={{\n position: 'absolute',\n top: 0,\n left: containerPadding,\n right: containerPadding,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n virtualRef={rowVirtualizer.measureElement}\n virtualIndex={virtualItem.index}\n menu={treeMenu}\n contextMenu={treeContextMenu}\n menuTriggerProps={menuTriggerProps}\n menuProps={menuProps}\n onToggleChecked={checkbox.toggle}\n onAction={treeOnAction}\n />\n );\n })}\n </div>\n </TreeScrollContainer>\n </TreeElement>\n );\n}\n\nconst _Tree = forwardRef(TreeBase);\n_Tree.displayName = 'Tree';\n\n/**\n * Hierarchical data display with optional checkboxes, single/multi\n * selection, async lazy loading, and keyboard navigation.\n *\n * Built on `useTree` / `useTreeState` (React Aria + React Stately) and\n * styled with Tasty.\n *\n * @example\n * ```tsx\n * <Tree\n * treeData={data}\n * isCheckable\n * selectionMode=\"none\"\n * defaultExpandedKeys={['root']}\n * onCheck={(keys) => console.log(keys)}\n * />\n * ```\n */\nexport const Tree = _Tree;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tree.js","names":[],"sources":["../../../../src/components/content/Tree/Tree.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { OUTER_STYLES } from '@tenphi/tasty';\nimport { forwardRef, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useTree } from 'react-aria';\nimport { Item, useTreeState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { SIZE_NAME_TO_KEY, SIZES } from '../../../tokens/sizes';\nimport { mergeRefs } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n\nimport { TreeElement, TreeScrollContainer } from './styled';\nimport { buildTreeIndex } from './tree-index';\nimport { TreeNode } from './TreeNode';\nimport { useCheckboxTree } from './use-checkbox-tree';\nimport { useLoadData } from './use-load-data';\n\nimport type { Key, Node, Selection } from '@react-types/shared';\nimport type {\n CSSProperties,\n ForwardedRef,\n ReactElement,\n ReactNode,\n} from 'react';\nimport type {\n CubeTreeNodeData,\n CubeTreeProps,\n TreeOnExpandInfo,\n TreeOnSelectInfo,\n TreeSelectionMode,\n} from './types';\n\n/**\n * Render an `<Item>` for React Stately's collection builder.\n *\n * The visible content is rendered by `TreeNode` via `nodesByKey`,\n * so `<Item>`'s body is only used by Stately for the collection\n * (`textValue` for keyboard nav, `childItems` for nested traversal).\n */\nfunction renderItem(node: CubeTreeNodeData): ReactElement {\n const textValue =\n typeof node.title === 'string' ? node.title : String(node.key);\n return (\n <Item\n key={node.key}\n textValue={textValue}\n childItems={node.children as CubeTreeNodeData[] | undefined}\n >\n {node.title as ReactNode}\n </Item>\n );\n}\n\nfunction collectDisabledKeys(\n treeData: CubeTreeNodeData[],\n treeIsDisabled: boolean,\n): string[] {\n const keys: string[] = [];\n const visit = (nodes: CubeTreeNodeData[]) => {\n for (const node of nodes) {\n if (treeIsDisabled || node.isDisabled) keys.push(node.key);\n if (node.children) visit(node.children);\n }\n };\n visit(treeData);\n return keys;\n}\n\n/** Expand the supplied keys with all of their ancestor keys. */\nfunction expandWithParents(\n keys: string[] | undefined,\n parentOf: Map<string, string | null>,\n): string[] | undefined {\n if (!keys || keys.length === 0) return keys;\n const set = new Set<string>(keys);\n for (const key of keys) {\n let parent = parentOf.get(key);\n while (parent) {\n set.add(parent);\n parent = parentOf.get(parent);\n }\n }\n return Array.from(set);\n}\n\n/**\n * Diff two key sets to find the single key that was added or removed.\n * Returns `null` when both sets are equal.\n */\nfunction findToggledKey(\n previous: Set<Key>,\n next: Set<Key>,\n): { key: Key; added: boolean } | null {\n for (const k of next) {\n if (!previous.has(k)) return { key: k, added: true };\n }\n for (const k of previous) {\n if (!next.has(k)) return { key: k, added: false };\n }\n return null;\n}\n\nfunction resolveSelectionMode(\n selectionMode: TreeSelectionMode | undefined,\n isSelectable: boolean | undefined,\n): TreeSelectionMode {\n if (selectionMode != null) return selectionMode;\n if (isSelectable === false) return 'none';\n return 'single';\n}\n\nfunction TreeBase(props: CubeTreeProps, ref: ForwardedRef<HTMLDivElement>) {\n const {\n treeData,\n isCheckable = false,\n isSelectable,\n selectionMode: selectionModeProp,\n size = 'medium',\n shape = 'default',\n containerPadding = 4,\n isDisabled = false,\n defaultExpandedKeys,\n expandedKeys,\n autoExpandParent = false,\n defaultCheckedKeys,\n checkedKeys,\n defaultSelectedKeys,\n selectedKeys,\n height,\n loadData,\n onExpand,\n onCheck,\n onSelect,\n itemProps,\n rowStyles,\n ariaLabel,\n qa,\n menu: treeMenu,\n contextMenu: treeContextMenu,\n onAction: treeOnAction,\n menuTriggerProps,\n menuProps,\n ...otherProps\n } = props;\n\n const baseStyles = extractStyles(otherProps, OUTER_STYLES);\n\n const treeRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n\n const treeIndex = useMemo(() => buildTreeIndex(treeData), [treeData]);\n const nodesByKey = treeIndex.byKey;\n const parentOf = treeIndex.parentOf;\n\n const disabledKeys = useMemo(\n () => collectDisabledKeys(treeData, isDisabled),\n [treeData, isDisabled],\n );\n\n const selectionMode = resolveSelectionMode(selectionModeProp, isSelectable);\n\n const effectiveExpandedKeys = useMemo(\n () =>\n autoExpandParent\n ? expandWithParents(expandedKeys, parentOf)\n : expandedKeys,\n [autoExpandParent, expandedKeys, parentOf],\n );\n\n const effectiveDefaultExpandedKeys = useMemo(\n () =>\n autoExpandParent\n ? expandWithParents(defaultExpandedKeys, parentOf)\n : defaultExpandedKeys,\n [autoExpandParent, defaultExpandedKeys, parentOf],\n );\n\n const checkbox = useCheckboxTree({\n treeData,\n index: treeIndex,\n isCheckable,\n defaultCheckedKeys,\n checkedKeys,\n onCheck,\n });\n\n const loadDataController = useLoadData({\n nodesByKey,\n loadData,\n initialExpandedKeys: effectiveExpandedKeys ?? effectiveDefaultExpandedKeys,\n });\n\n /**\n * In controlled mode, `previous` is read from `effectiveExpandedKeys`;\n * in uncontrolled mode this ref is the only source. Initialized from\n * the *effective* (ancestor-expanded) keys so the first toggle diffs\n * correctly.\n */\n const previousExpandedRef = useRef<Set<Key>>(\n new Set<Key>(effectiveExpandedKeys ?? effectiveDefaultExpandedKeys ?? []),\n );\n\n const handleExpandedChange = useEvent((nextSet: Set<Key>) => {\n loadDataController.onExpandedChanged(nextSet);\n\n const previous =\n expandedKeys !== undefined\n ? new Set<Key>(effectiveExpandedKeys ?? [])\n : previousExpandedRef.current;\n previousExpandedRef.current = new Set<Key>(nextSet);\n\n if (!onExpand) return;\n\n const toggled = findToggledKey(previous, nextSet);\n if (!toggled) return;\n\n const node = nodesByKey.get(String(toggled.key));\n if (!node) return;\n\n const info: TreeOnExpandInfo = {\n expanded: toggled.added,\n node,\n };\n onExpand(Array.from(nextSet), info);\n });\n\n /**\n * Same pattern as `previousExpandedRef`: in controlled mode we read\n * from `selectedKeys`; in uncontrolled mode this ref tracks state.\n */\n const previousSelectionRef = useRef<Set<Key>>(\n new Set<Key>(selectedKeys ?? defaultSelectedKeys ?? []),\n );\n\n /**\n * `useEvent` captures the closure lazily, so `state` (declared below\n * `ariaProps` / `useTreeState`) is safely accessible at call time.\n */\n const handleSelectionChange = useEvent((selection: Selection) => {\n if (!onSelect) return;\n let arr: Key[];\n if (selection === 'all') {\n // `nodesByKey` contains the full tree; use the collection's visible\n // keys so we don't leak keys under collapsed parents.\n arr = [];\n for (const key of state.collection.getKeys()) {\n const node = state.collection.getItem(key);\n if (node && node.type === 'item') arr.push(key);\n }\n } else {\n arr = Array.from(selection);\n }\n\n const nextSet = new Set<Key>(arr);\n const previous =\n selectedKeys !== undefined\n ? new Set<Key>(selectedKeys ?? [])\n : previousSelectionRef.current;\n previousSelectionRef.current = nextSet;\n\n const toggled = findToggledKey(previous, nextSet);\n if (!toggled) return;\n\n const node = nodesByKey.get(String(toggled.key));\n if (!node) return;\n\n const selectedNodes = arr\n .map((k) => nodesByKey.get(String(k)))\n .filter((n): n is CubeTreeNodeData => !!n);\n\n const info: TreeOnSelectInfo = {\n selected: toggled.added,\n node,\n selectedNodes,\n };\n\n onSelect(arr, info);\n });\n\n const hasOnSelect = onSelect != null;\n\n const ariaProps = useMemo(\n () => ({\n selectionMode,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange:\n hasOnSelect && selectionMode !== 'none'\n ? handleSelectionChange\n : undefined,\n expandedKeys: effectiveExpandedKeys,\n defaultExpandedKeys: effectiveDefaultExpandedKeys,\n onExpandedChange: handleExpandedChange,\n disabledKeys,\n disabledBehavior: 'all' as const,\n items: treeData,\n children: renderItem as any,\n 'aria-label': ariaLabel ?? 'Tree',\n }),\n [\n selectionMode,\n selectedKeys,\n defaultSelectedKeys,\n hasOnSelect,\n handleSelectionChange,\n effectiveExpandedKeys,\n effectiveDefaultExpandedKeys,\n handleExpandedChange,\n disabledKeys,\n treeData,\n ariaLabel,\n ],\n );\n\n const baseState = useTreeState<CubeTreeNodeData>(ariaProps);\n\n // The legacy `TreeCollection` from `useTreeState` lacks `getChildren`,\n // but `useTree` calls it for nested rows. Derive a patched state.\n // TODO: Remove this patch when upgrading to a react-stately version\n // that ships `getChildren` on TreeCollection natively.\n const state = useMemo(() => {\n const collection = baseState.collection;\n if (typeof (collection as any).getChildren === 'function') {\n return baseState;\n }\n const patched = Object.create(collection);\n patched.getChildren = (key: Key): Iterable<Node<CubeTreeNodeData>> => {\n const node = collection.getItem(key);\n return node ? Array.from(node.childNodes) : [];\n };\n return { ...baseState, collection: patched };\n }, [baseState]);\n\n const { gridProps } = useTree(ariaProps, state, treeRef);\n\n const visibleNodes: Node<CubeTreeNodeData>[] = useMemo(() => {\n const out: Node<CubeTreeNodeData>[] = [];\n for (const key of state.collection.getKeys()) {\n const node = state.collection.getItem(key);\n if (node && node.type === 'item') out.push(node);\n }\n return out;\n }, [state.collection]);\n\n const visibleNodesRef = useRef(visibleNodes);\n visibleNodesRef.current = visibleNodes;\n\n // ----- Virtualization -----\n const rowVirtualizer = useVirtualizer({\n count: visibleNodes.length,\n getScrollElement: () => scrollRef.current,\n getItemKey: (index: number) => {\n const node = visibleNodesRef.current[index];\n return node?.key ?? index;\n },\n estimateSize: () => SIZES[SIZE_NAME_TO_KEY[size]],\n gap: 1,\n overscan: 10,\n paddingStart: containerPadding,\n paddingEnd: containerPadding,\n });\n\n const treeStyle = useMemo<CSSProperties | undefined>(() => {\n if (height == null) return undefined;\n return { ['--tree-height' as keyof CSSProperties]: `${height}px` };\n }, [height]);\n\n const sizerStyle = useMemo<CSSProperties>(\n () => ({\n position: 'relative',\n width: '100%',\n height: `${rowVirtualizer.getTotalSize()}px`,\n }),\n [rowVirtualizer.getTotalSize()],\n );\n\n /**\n * Each scroll effect tracks its own \"last scrolled\" target instead\n * of sharing one ref. A shared ref creates a feedback loop: keyboard\n * nav updates the focused-key ref to the new row, and any subsequent\n * `visibleNodes` change OR `selectedKeys` array-identity change\n * (very common — `selectedKeys={[value]}` allocates a fresh array\n * every parent render) re-runs the selectedKeys effect, which sees\n * the ref no longer matches `selectedKeys[0]` and yanks the viewport\n * back to the selected row. Two refs let each effect dedupe against\n * its own intent only; the cost is at most one duplicate\n * `scrollToIndex` call when click updates focus and selection in the\n * same render (idempotent — both target the same index).\n */\n const lastFocusedScrollRef = useRef<Key | null>(null);\n const lastSelectedScrollRef = useRef<string | null>(null);\n\n /**\n * Keep the focused row visible during keyboard navigation.\n *\n * Uses `rowVirtualizer.scrollToIndex` (instead of\n * `querySelector + scrollIntoView`) so the scroll lands even when the\n * target row is outside the virtualizer's currently rendered window.\n * `align: 'auto'` only scrolls when needed, matching the prior\n * `scrollIntoView({ block: 'nearest' })` behavior.\n */\n useLayoutEffect(() => {\n const focusedKey = state.selectionManager.focusedKey;\n if (focusedKey == null) return;\n if (lastFocusedScrollRef.current === focusedKey) return;\n\n const index = visibleNodesRef.current.findIndex(\n (n) => n.key === focusedKey,\n );\n if (index < 0) return;\n\n rowVirtualizer.scrollToIndex(index, { align: 'auto' });\n lastFocusedScrollRef.current = focusedKey;\n }, [state.selectionManager.focusedKey, rowVirtualizer]);\n\n /**\n * Scroll into view when controlled `selectedKeys` changes externally.\n *\n * Selection-manager `focusedKey` only updates on explicit user\n * interaction (click / keyboard) — it does NOT track controlled\n * `selectedKeys` prop changes. So when a parent updates the prop\n * (e.g. opening a file from elsewhere), we need a separate effect\n * to bring the row into view.\n *\n * Re-runs on `visibleNodes` so we retry once parents are expanded\n * (the row is invisible to the virtualizer until then).\n */\n useLayoutEffect(() => {\n if (selectedKeys == null) return;\n const target = selectedKeys[0];\n if (target == null) return;\n if (lastSelectedScrollRef.current === target) return;\n\n const index = visibleNodes.findIndex((n) => String(n.key) === target);\n if (index < 0) return;\n\n rowVirtualizer.scrollToIndex(index, { align: 'auto' });\n lastSelectedScrollRef.current = target;\n }, [selectedKeys, visibleNodes, rowVirtualizer]);\n\n const mods = useMemo(\n () => ({\n 'has-height': height != null,\n shape,\n }),\n [height, shape],\n );\n\n // The forwarded ref points at the inner scroll container so\n // consumers can drive `scrollTop` directly. `treeRef` (used by\n // `useTree` for keyboard handling and as the role=\"treegrid\"\n // anchor) stays internal on `TreeElement`.\n const mergedScrollRef = useMemo(\n () => mergeRefs(ref, scrollRef),\n [ref, scrollRef],\n );\n\n return (\n <TreeElement\n {...gridProps}\n ref={treeRef}\n qa={qa ?? 'Tree'}\n mods={mods}\n styles={baseStyles}\n style={treeStyle}\n >\n <TreeScrollContainer ref={mergedScrollRef}>\n <div role=\"presentation\" style={sizerStyle}>\n {rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const node = visibleNodes[virtualItem.index];\n if (!node) return null;\n const keyStr = String(node.key);\n const data = nodesByKey.get(keyStr);\n if (!data) return null;\n return (\n <TreeNode\n key={node.key}\n node={node}\n data={data}\n state={state}\n isCheckable={isCheckable}\n isExpanded={state.expandedKeys.has(node.key)}\n isChecked={checkbox.checkedSet.has(keyStr)}\n isIndeterminate={checkbox.halfCheckedSet.has(keyStr)}\n isLoading={loadDataController.loadingKeys.has(keyStr)}\n size={size}\n itemProps={itemProps}\n rowStyles={rowStyles}\n virtualStyle={{\n position: 'absolute',\n top: 0,\n left: containerPadding,\n right: containerPadding,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n virtualRef={rowVirtualizer.measureElement}\n virtualIndex={virtualItem.index}\n menu={treeMenu}\n contextMenu={treeContextMenu}\n menuTriggerProps={menuTriggerProps}\n menuProps={menuProps}\n onToggleChecked={checkbox.toggle}\n onAction={treeOnAction}\n />\n );\n })}\n </div>\n </TreeScrollContainer>\n </TreeElement>\n );\n}\n\nconst _Tree = forwardRef(TreeBase);\n_Tree.displayName = 'Tree';\n\n/**\n * Hierarchical data display with optional checkboxes, single/multi\n * selection, async lazy loading, and keyboard navigation.\n *\n * Built on `useTree` / `useTreeState` (React Aria + React Stately) and\n * styled with Tasty.\n *\n * @example\n * ```tsx\n * <Tree\n * treeData={data}\n * isCheckable\n * selectionMode=\"none\"\n * defaultExpandedKeys={['root']}\n * onCheck={(keys) => console.log(keys)}\n * />\n * ```\n */\nexport const Tree = _Tree;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useMemo, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | 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.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { _Text } from "./Text.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.133.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.135.0 | Cube Dev Team */
2
2
  import { TooltipProvider } from "../overlays/Tooltip/TooltipProvider.js";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";