@cube-dev/ui-kit 0.128.0 → 0.129.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 (427) hide show
  1. package/dist/CHANGELOG.md +23 -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 +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.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/index.js +1 -1
  38. package/dist/components/actions/use-action.js +1 -1
  39. package/dist/components/actions/use-anchored-menu.js +1 -1
  40. package/dist/components/actions/use-context-menu.js +1 -1
  41. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  42. package/dist/components/content/Alert/Alert.js +1 -1
  43. package/dist/components/content/Alert/use-alert.js +1 -1
  44. package/dist/components/content/Avatar/Avatar.js +1 -1
  45. package/dist/components/content/Badge/Badge.js +1 -1
  46. package/dist/components/content/Card/Card.js +1 -1
  47. package/dist/components/content/Content.js +1 -1
  48. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  49. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  50. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  51. package/dist/components/content/Divider.js +1 -1
  52. package/dist/components/content/Footer.js +1 -1
  53. package/dist/components/content/Header.js +1 -1
  54. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  55. package/dist/components/content/Item/Item.js +1 -1
  56. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  57. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  58. package/dist/components/content/Layout/GridLayout.js +1 -1
  59. package/dist/components/content/Layout/Layout.js +1 -1
  60. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  61. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  62. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  63. package/dist/components/content/Layout/LayoutContent.js +1 -1
  64. package/dist/components/content/Layout/LayoutContext.js +1 -1
  65. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  66. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  67. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  68. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  69. package/dist/components/content/Layout/LayoutPane.js +1 -1
  70. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  73. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  74. package/dist/components/content/Layout/index.js +1 -1
  75. package/dist/components/content/Layout/utils.js +1 -1
  76. package/dist/components/content/Paragraph.js +1 -1
  77. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  78. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  79. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  80. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  81. package/dist/components/content/Result/Result.js +1 -1
  82. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  83. package/dist/components/content/Tag/Tag.js +1 -1
  84. package/dist/components/content/Text.js +1 -1
  85. package/dist/components/content/TextItem/TextItem.js +1 -1
  86. package/dist/components/content/Title.js +1 -1
  87. package/dist/components/content/Tree/Tree.d.ts +27 -0
  88. package/dist/components/content/Tree/Tree.js +265 -0
  89. package/dist/components/content/Tree/Tree.js.map +1 -0
  90. package/dist/components/content/Tree/TreeNode.js +107 -0
  91. package/dist/components/content/Tree/TreeNode.js.map +1 -0
  92. package/dist/components/content/Tree/index.d.ts +3 -0
  93. package/dist/components/content/Tree/styled.js +146 -0
  94. package/dist/components/content/Tree/styled.js.map +1 -0
  95. package/dist/components/content/Tree/tree-index.js +26 -0
  96. package/dist/components/content/Tree/tree-index.js.map +1 -0
  97. package/dist/components/content/Tree/types.d.ts +145 -0
  98. package/dist/components/content/Tree/use-checkbox-tree.js +231 -0
  99. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -0
  100. package/dist/components/content/Tree/use-load-data.js +75 -0
  101. package/dist/components/content/Tree/use-load-data.js.map +1 -0
  102. package/dist/components/content/highlightText.js +1 -1
  103. package/dist/components/content/use-auto-tooltip.js +1 -1
  104. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  105. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  106. package/dist/components/fields/Checkbox/context.js +1 -1
  107. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  108. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  109. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  110. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  111. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  112. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  113. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  114. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  115. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  116. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  117. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  118. package/dist/components/fields/DatePicker/intl.js +1 -1
  119. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  120. package/dist/components/fields/DatePicker/props.js +1 -1
  121. package/dist/components/fields/DatePicker/utils.js +1 -1
  122. package/dist/components/fields/FileInput/FileInput.js +1 -1
  123. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  124. package/dist/components/fields/FilterPicker/FilterPicker.js +2 -1
  125. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  126. package/dist/components/fields/Input/Input.js +1 -1
  127. package/dist/components/fields/ListBox/ListBox.js +1 -1
  128. package/dist/components/fields/NumberInput/NumberInput.js +2 -2
  129. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  130. package/dist/components/fields/PasswordInput/PasswordInput.js +2 -2
  131. package/dist/components/fields/Picker/Picker.js +1 -1
  132. package/dist/components/fields/RadioGroup/Radio.js +2 -2
  133. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  134. package/dist/components/fields/RadioGroup/context.js +1 -1
  135. package/dist/components/fields/SearchInput/SearchInput.js +2 -2
  136. package/dist/components/fields/Select/Select.js +1 -1
  137. package/dist/components/fields/Slider/Gradation.js +1 -1
  138. package/dist/components/fields/Slider/HueSlider.js +1 -1
  139. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  140. package/dist/components/fields/Slider/Slider.js +1 -1
  141. package/dist/components/fields/Slider/SliderBase.js +1 -1
  142. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  143. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  144. package/dist/components/fields/Slider/elements.js +1 -1
  145. package/dist/components/fields/Slider/index.js +1 -1
  146. package/dist/components/fields/Switch/Switch.js +1 -1
  147. package/dist/components/fields/TextArea/TextArea.js +2 -2
  148. package/dist/components/fields/TextInput/TextInput.js +2 -2
  149. package/dist/components/fields/TextInput/TextInputBase.js +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/OpenTransition.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/InvalidIcon.js +1 -1
  239. package/dist/components/shared/ValidIcon.js +1 -1
  240. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  241. package/dist/components/status/Spin/Cube.js +1 -1
  242. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  243. package/dist/components/status/Spin/Spin.js +1 -1
  244. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  245. package/dist/data/item-themes.js +1 -1
  246. package/dist/data/themes.js +1 -1
  247. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  248. package/dist/icons/AdjustmentsIcon.js +1 -1
  249. package/dist/icons/AiIcon.js +1 -1
  250. package/dist/icons/AreaChartIcon.js +1 -1
  251. package/dist/icons/BackwardIcon.js +1 -1
  252. package/dist/icons/BarChartIcon.js +1 -1
  253. package/dist/icons/BellFilledIcon.js +1 -1
  254. package/dist/icons/BellIcon.js +1 -1
  255. package/dist/icons/BooleanIcon.js +1 -1
  256. package/dist/icons/CalendarEditIcon.js +1 -1
  257. package/dist/icons/CalendarIcon.js +1 -1
  258. package/dist/icons/CaretDownIcon.js +1 -1
  259. package/dist/icons/CaretUpIcon.js +1 -1
  260. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  261. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  262. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  263. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  264. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  265. package/dist/icons/ChartBarLineIcon.js +1 -1
  266. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  267. package/dist/icons/ChartBarStackedIcon.js +1 -1
  268. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  269. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  270. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  271. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  272. package/dist/icons/ChartBubbleIcon.js +1 -1
  273. package/dist/icons/ChartDonut2Icon.js +1 -1
  274. package/dist/icons/ChartFunnelIcon.js +1 -1
  275. package/dist/icons/ChartHeatmapIcon.js +1 -1
  276. package/dist/icons/ChartKPIIcon.js +1 -1
  277. package/dist/icons/ChartPie2Icon.js +1 -1
  278. package/dist/icons/ChartScatterIcon.js +1 -1
  279. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  280. package/dist/icons/CheckCircleIcon.js +1 -1
  281. package/dist/icons/CheckIcon.js +1 -1
  282. package/dist/icons/CircleFilledIcon.js +1 -1
  283. package/dist/icons/ClearIcon.js +1 -1
  284. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  285. package/dist/icons/CloseCircleIcon.js +1 -1
  286. package/dist/icons/CloseIcon.js +1 -1
  287. package/dist/icons/CodeIcon.js +1 -1
  288. package/dist/icons/ColumnTotalIcon.js +1 -1
  289. package/dist/icons/CopyIcon.js +1 -1
  290. package/dist/icons/CountIcon.js +1 -1
  291. package/dist/icons/CubeIcon.js +1 -1
  292. package/dist/icons/CubePauseIcon.js +1 -1
  293. package/dist/icons/CubePlayIcon.js +1 -1
  294. package/dist/icons/CurrencyDollarIcon.js +1 -1
  295. package/dist/icons/DangerIcon.js +1 -1
  296. package/dist/icons/DashboardIcon.js +1 -1
  297. package/dist/icons/DatabaseIcon.js +1 -1
  298. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  299. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  300. package/dist/icons/DirectionIcon.js +1 -1
  301. package/dist/icons/DonutIcon.js +1 -1
  302. package/dist/icons/DownIcon.js +1 -1
  303. package/dist/icons/EditIcon.js +1 -1
  304. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  305. package/dist/icons/ExclamationCircleIcon.js +1 -1
  306. package/dist/icons/ExclamationIcon.js +1 -1
  307. package/dist/icons/EyeIcon.js +1 -1
  308. package/dist/icons/EyeInvisibleIcon.js +1 -1
  309. package/dist/icons/FilterIcon.js +1 -1
  310. package/dist/icons/FolderFilledIcon.js +1 -1
  311. package/dist/icons/FolderIcon.js +1 -1
  312. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  313. package/dist/icons/FolderOpenIcon.js +1 -1
  314. package/dist/icons/ForwardIcon.js +1 -1
  315. package/dist/icons/HierarchyIcon.js +1 -1
  316. package/dist/icons/HierarchyOpenIcon.js +1 -1
  317. package/dist/icons/Icon.js +1 -1
  318. package/dist/icons/InfoCircleIcon.js +1 -1
  319. package/dist/icons/InfoIcon.js +1 -1
  320. package/dist/icons/KeyIcon.js +1 -1
  321. package/dist/icons/LeftIcon.js +1 -1
  322. package/dist/icons/LineChartIcon.js +1 -1
  323. package/dist/icons/LoadingIcon.js +1 -1
  324. package/dist/icons/LockFilledIcon.js +1 -1
  325. package/dist/icons/LockIcon.js +1 -1
  326. package/dist/icons/MoreIcon.js +1 -1
  327. package/dist/icons/NotAllowedIcon.js +1 -1
  328. package/dist/icons/Number123Icon.js +1 -1
  329. package/dist/icons/NumberIcon.js +1 -1
  330. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  331. package/dist/icons/PauseCircleIcon.js +1 -1
  332. package/dist/icons/PauseIcon.js +1 -1
  333. package/dist/icons/PercentageIcon.js +1 -1
  334. package/dist/icons/PieChartIcon.js +1 -1
  335. package/dist/icons/PlayCircleIcon.js +1 -1
  336. package/dist/icons/PlayIcon.js +1 -1
  337. package/dist/icons/PlusIcon.js +1 -1
  338. package/dist/icons/ProgressBarIcon.js +1 -1
  339. package/dist/icons/ReloadIcon.js +1 -1
  340. package/dist/icons/ReportIcon.js +1 -1
  341. package/dist/icons/ReturnIcon.js +1 -1
  342. package/dist/icons/RightIcon.js +1 -1
  343. package/dist/icons/RowTotalsIcon.js +1 -1
  344. package/dist/icons/SchemeIcon.js +1 -1
  345. package/dist/icons/SearchIcon.js +1 -1
  346. package/dist/icons/SemanticQueryIcon.js +1 -1
  347. package/dist/icons/SettingsIcon.js +1 -1
  348. package/dist/icons/ShieldFilledIcon.js +1 -1
  349. package/dist/icons/ShieldIcon.js +1 -1
  350. package/dist/icons/SlashIcon.js +1 -1
  351. package/dist/icons/SparklesIcon.js +1 -1
  352. package/dist/icons/SqlIcon.js +1 -1
  353. package/dist/icons/StatsIcon.js +1 -1
  354. package/dist/icons/StopIcon.js +1 -1
  355. package/dist/icons/StringIcon.js +1 -1
  356. package/dist/icons/SubtotalsIcon.js +1 -1
  357. package/dist/icons/SwitchIcon.js +1 -1
  358. package/dist/icons/TableIcon.js +1 -1
  359. package/dist/icons/ThumbsDownIcon.js +1 -1
  360. package/dist/icons/ThumbsUpIcon.js +1 -1
  361. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  362. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  363. package/dist/icons/ThunderboltIcon.js +1 -1
  364. package/dist/icons/TimeIcon.js +1 -1
  365. package/dist/icons/TrashIcon.js +1 -1
  366. package/dist/icons/UnlockIcon.js +1 -1
  367. package/dist/icons/UpIcon.js +1 -1
  368. package/dist/icons/UserGroupIcon.js +1 -1
  369. package/dist/icons/UserIcon.js +1 -1
  370. package/dist/icons/UserLockIcon.js +1 -1
  371. package/dist/icons/ViewIcon.js +1 -1
  372. package/dist/icons/WarningFilledIcon.js +1 -1
  373. package/dist/icons/WarningIcon.js +1 -1
  374. package/dist/icons/wrap-icon.js +1 -1
  375. package/dist/index.d.ts +4 -1
  376. package/dist/index.js +5 -4
  377. package/dist/index.js.map +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/components/content/Tree.md +299 -0
  426. package/docs/tasty/dsl.md +1 -0
  427. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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.128.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.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";
@@ -0,0 +1,27 @@
1
+
2
+ import { CubeTreeProps } from "./types.js";
3
+ import * as react from "react";
4
+
5
+ //#region src/components/content/Tree/Tree.d.ts
6
+ /**
7
+ * Hierarchical data display with optional checkboxes, single/multi
8
+ * selection, async lazy loading, and keyboard navigation.
9
+ *
10
+ * Built on `useTree` / `useTreeState` (React Aria + React Stately) and
11
+ * styled with Tasty.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <Tree
16
+ * treeData={data}
17
+ * isCheckable
18
+ * selectionMode="none"
19
+ * defaultExpandedKeys={['root']}
20
+ * onCheck={(keys) => console.log(keys)}
21
+ * />
22
+ * ```
23
+ */
24
+ declare const Tree: react.ForwardRefExoticComponent<CubeTreeProps & react.RefAttributes<HTMLDivElement>>;
25
+ //#endregion
26
+ export { Tree };
27
+ //# sourceMappingURL=Tree.d.ts.map
@@ -0,0 +1,265 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.0 | Cube Dev Team */
2
+ import { extractStyles } from "../../../utils/styles.js";
3
+ import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
+ import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
5
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
6
+ import { TreeElement } from "./styled.js";
7
+ import { buildTreeIndex } from "./tree-index.js";
8
+ import { TreeNode } from "./TreeNode.js";
9
+ import { useCheckboxTree } from "./use-checkbox-tree.js";
10
+ import { useLoadData } from "./use-load-data.js";
11
+ import { OUTER_STYLES } from "@tenphi/tasty";
12
+ import { forwardRef, useMemo, useRef } from "react";
13
+ import { jsx } from "react/jsx-runtime";
14
+ import { useTree } from "react-aria";
15
+ import { Item, useTreeState } from "react-stately";
16
+
17
+ //#region src/components/content/Tree/Tree.tsx
18
+ /**
19
+ * Render an `<Item>` for React Stately's collection builder.
20
+ *
21
+ * The visible content is rendered by `TreeNode` via `nodesByKey`,
22
+ * so `<Item>`'s body is only used by Stately for the collection
23
+ * (`textValue` for keyboard nav, `childItems` for nested traversal).
24
+ */
25
+ function renderItem(node) {
26
+ return /* @__PURE__ */ jsx(Item, {
27
+ textValue: typeof node.title === "string" ? node.title : String(node.key),
28
+ childItems: node.children,
29
+ children: node.title
30
+ }, node.key);
31
+ }
32
+ function collectDisabledKeys(treeData, treeIsDisabled) {
33
+ const keys = [];
34
+ const visit = (nodes) => {
35
+ for (const node of nodes) {
36
+ if (treeIsDisabled || node.isDisabled) keys.push(node.key);
37
+ if (node.children) visit(node.children);
38
+ }
39
+ };
40
+ visit(treeData);
41
+ return keys;
42
+ }
43
+ /** Expand the supplied keys with all of their ancestor keys. */
44
+ function expandWithParents(keys, parentOf) {
45
+ if (!keys || keys.length === 0) return keys;
46
+ const set = new Set(keys);
47
+ for (const key of keys) {
48
+ let parent = parentOf.get(key);
49
+ while (parent) {
50
+ set.add(parent);
51
+ parent = parentOf.get(parent);
52
+ }
53
+ }
54
+ return Array.from(set);
55
+ }
56
+ /**
57
+ * Diff two key sets to find the single key that was added or removed.
58
+ * Returns `null` when both sets are equal.
59
+ */
60
+ function findToggledKey(previous, next) {
61
+ for (const k of next) if (!previous.has(k)) return {
62
+ key: k,
63
+ added: true
64
+ };
65
+ for (const k of previous) if (!next.has(k)) return {
66
+ key: k,
67
+ added: false
68
+ };
69
+ return null;
70
+ }
71
+ function resolveSelectionMode(selectionMode, isSelectable) {
72
+ if (selectionMode != null) return selectionMode;
73
+ if (isSelectable === false) return "none";
74
+ return "single";
75
+ }
76
+ function TreeBase(props, ref) {
77
+ const { treeData, isCheckable = false, isSelectable, selectionMode: selectionModeProp, isDisabled = false, defaultExpandedKeys, expandedKeys, autoExpandParent = false, defaultCheckedKeys, checkedKeys, defaultSelectedKeys, selectedKeys, height, loadData, onExpand, onCheck, onSelect, rowStyles, ariaLabel, qa, ...otherProps } = props;
78
+ const baseStyles = extractStyles(otherProps, OUTER_STYLES);
79
+ const treeRef = useRef(null);
80
+ const treeIndex = useMemo(() => buildTreeIndex(treeData), [treeData]);
81
+ const nodesByKey = treeIndex.byKey;
82
+ const parentOf = treeIndex.parentOf;
83
+ const disabledKeys = useMemo(() => collectDisabledKeys(treeData, isDisabled), [treeData, isDisabled]);
84
+ const selectionMode = resolveSelectionMode(selectionModeProp, isSelectable);
85
+ const effectiveExpandedKeys = useMemo(() => autoExpandParent ? expandWithParents(expandedKeys, parentOf) : expandedKeys, [
86
+ autoExpandParent,
87
+ expandedKeys,
88
+ parentOf
89
+ ]);
90
+ const effectiveDefaultExpandedKeys = useMemo(() => autoExpandParent ? expandWithParents(defaultExpandedKeys, parentOf) : defaultExpandedKeys, [
91
+ autoExpandParent,
92
+ defaultExpandedKeys,
93
+ parentOf
94
+ ]);
95
+ const checkbox = useCheckboxTree({
96
+ treeData,
97
+ index: treeIndex,
98
+ isCheckable,
99
+ defaultCheckedKeys,
100
+ checkedKeys,
101
+ onCheck
102
+ });
103
+ const loadDataController = useLoadData({
104
+ nodesByKey,
105
+ loadData,
106
+ initialExpandedKeys: effectiveExpandedKeys ?? effectiveDefaultExpandedKeys
107
+ });
108
+ /**
109
+ * In controlled mode, `previous` is read from `effectiveExpandedKeys`;
110
+ * in uncontrolled mode this ref is the only source. Initialized from
111
+ * the *effective* (ancestor-expanded) keys so the first toggle diffs
112
+ * correctly.
113
+ */
114
+ const previousExpandedRef = useRef(new Set(effectiveExpandedKeys ?? effectiveDefaultExpandedKeys ?? []));
115
+ const handleExpandedChange = useEvent((nextSet) => {
116
+ loadDataController.onExpandedChanged(nextSet);
117
+ const previous = expandedKeys !== void 0 ? new Set(effectiveExpandedKeys ?? []) : previousExpandedRef.current;
118
+ previousExpandedRef.current = new Set(nextSet);
119
+ if (!onExpand) return;
120
+ const toggled = findToggledKey(previous, nextSet);
121
+ if (!toggled) return;
122
+ const node = nodesByKey.get(String(toggled.key));
123
+ if (!node) return;
124
+ const info = {
125
+ expanded: toggled.added,
126
+ node
127
+ };
128
+ onExpand(Array.from(nextSet), info);
129
+ });
130
+ /**
131
+ * Same pattern as `previousExpandedRef`: in controlled mode we read
132
+ * from `selectedKeys`; in uncontrolled mode this ref tracks state.
133
+ */
134
+ const previousSelectionRef = useRef(new Set(selectedKeys ?? defaultSelectedKeys ?? []));
135
+ /**
136
+ * `useEvent` captures the closure lazily, so `state` (declared below
137
+ * `ariaProps` / `useTreeState`) is safely accessible at call time.
138
+ */
139
+ const handleSelectionChange = useEvent((selection) => {
140
+ if (!onSelect) return;
141
+ let arr;
142
+ if (selection === "all") {
143
+ arr = [];
144
+ for (const key of state.collection.getKeys()) {
145
+ const node = state.collection.getItem(key);
146
+ if (node && node.type === "item") arr.push(key);
147
+ }
148
+ } else arr = Array.from(selection);
149
+ const nextSet = new Set(arr);
150
+ const previous = selectedKeys !== void 0 ? new Set(selectedKeys ?? []) : previousSelectionRef.current;
151
+ previousSelectionRef.current = nextSet;
152
+ const toggled = findToggledKey(previous, nextSet);
153
+ if (!toggled) return;
154
+ const node = nodesByKey.get(String(toggled.key));
155
+ if (!node) return;
156
+ const selectedNodes = arr.map((k) => nodesByKey.get(String(k))).filter((n) => !!n);
157
+ const info = {
158
+ selected: toggled.added,
159
+ node,
160
+ selectedNodes
161
+ };
162
+ onSelect(arr, info);
163
+ });
164
+ const hasOnSelect = onSelect != null;
165
+ const ariaProps = useMemo(() => ({
166
+ selectionMode,
167
+ selectedKeys,
168
+ defaultSelectedKeys,
169
+ onSelectionChange: hasOnSelect && selectionMode !== "none" ? handleSelectionChange : void 0,
170
+ expandedKeys: effectiveExpandedKeys,
171
+ defaultExpandedKeys: effectiveDefaultExpandedKeys,
172
+ onExpandedChange: handleExpandedChange,
173
+ disabledKeys,
174
+ disabledBehavior: "all",
175
+ items: treeData,
176
+ children: renderItem,
177
+ "aria-label": ariaLabel ?? "Tree"
178
+ }), [
179
+ selectionMode,
180
+ selectedKeys,
181
+ defaultSelectedKeys,
182
+ hasOnSelect,
183
+ handleSelectionChange,
184
+ effectiveExpandedKeys,
185
+ effectiveDefaultExpandedKeys,
186
+ handleExpandedChange,
187
+ disabledKeys,
188
+ treeData,
189
+ ariaLabel
190
+ ]);
191
+ const baseState = useTreeState(ariaProps);
192
+ const state = useMemo(() => {
193
+ const collection = baseState.collection;
194
+ if (typeof collection.getChildren === "function") return baseState;
195
+ const patched = Object.create(collection);
196
+ patched.getChildren = (key) => {
197
+ const node = collection.getItem(key);
198
+ return node ? Array.from(node.childNodes) : [];
199
+ };
200
+ return {
201
+ ...baseState,
202
+ collection: patched
203
+ };
204
+ }, [baseState]);
205
+ const { gridProps } = useTree(ariaProps, state, treeRef);
206
+ const visibleNodes = useMemo(() => {
207
+ const out = [];
208
+ for (const key of state.collection.getKeys()) {
209
+ const node = state.collection.getItem(key);
210
+ if (node && node.type === "item") out.push(node);
211
+ }
212
+ return out;
213
+ }, [state.collection]);
214
+ const heightStyle = useMemo(() => height != null ? { ["--tree-height"]: `${height}px` } : void 0, [height]);
215
+ const mods = useMemo(() => ({ "has-height": height != null }), [height]);
216
+ return /* @__PURE__ */ jsx(TreeElement, {
217
+ ...mergeProps$1(gridProps, { ref: useMemo(() => mergeRefs(ref, treeRef), [ref, treeRef]) }),
218
+ qa: qa ?? "Tree",
219
+ mods,
220
+ styles: baseStyles,
221
+ style: heightStyle,
222
+ children: visibleNodes.map((node) => {
223
+ const keyStr = String(node.key);
224
+ const data = nodesByKey.get(keyStr);
225
+ if (!data) return null;
226
+ return /* @__PURE__ */ jsx(TreeNode, {
227
+ node,
228
+ data,
229
+ state,
230
+ isCheckable,
231
+ isExpanded: state.expandedKeys.has(node.key),
232
+ isChecked: checkbox.checkedSet.has(keyStr),
233
+ isIndeterminate: checkbox.halfCheckedSet.has(keyStr),
234
+ isLoading: loadDataController.loadingKeys.has(keyStr),
235
+ rowStyles,
236
+ onToggleChecked: checkbox.toggle
237
+ }, node.key);
238
+ })
239
+ });
240
+ }
241
+ const _Tree = forwardRef(TreeBase);
242
+ _Tree.displayName = "Tree";
243
+ /**
244
+ * Hierarchical data display with optional checkboxes, single/multi
245
+ * selection, async lazy loading, and keyboard navigation.
246
+ *
247
+ * Built on `useTree` / `useTreeState` (React Aria + React Stately) and
248
+ * styled with Tasty.
249
+ *
250
+ * @example
251
+ * ```tsx
252
+ * <Tree
253
+ * treeData={data}
254
+ * isCheckable
255
+ * selectionMode="none"
256
+ * defaultExpandedKeys={['root']}
257
+ * onCheck={(keys) => console.log(keys)}
258
+ * />
259
+ * ```
260
+ */
261
+ const Tree = _Tree;
262
+
263
+ //#endregion
264
+ export { Tree };
265
+ //# sourceMappingURL=Tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tree.js","names":["mergeProps"],"sources":["../../../../src/components/content/Tree/Tree.tsx"],"sourcesContent":["import { OUTER_STYLES } from '@tenphi/tasty';\nimport { forwardRef, useMemo, useRef } from 'react';\nimport { useTree } from 'react-aria';\nimport { Item, useTreeState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { mergeProps, mergeRefs } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n\nimport { TreeElement } 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 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 rowStyles,\n ariaLabel,\n qa,\n ...otherProps\n } = props;\n\n const baseStyles = extractStyles(otherProps, OUTER_STYLES);\n\n const treeRef = 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 heightStyle = useMemo<CSSProperties | undefined>(\n () =>\n height != null\n ? ({\n ['--tree-height' as keyof CSSProperties]: `${height}px`,\n } as CSSProperties)\n : undefined,\n [height],\n );\n\n const mods = useMemo(\n () => ({\n 'has-height': height != null,\n }),\n [height],\n );\n\n // Both `useTree` and the consumer need the same DOM node.\n const mergedRef = useMemo(() => mergeRefs(ref, treeRef), [ref, treeRef]);\n\n const elementProps = mergeProps(gridProps, {\n ref: mergedRef,\n });\n\n return (\n <TreeElement\n {...elementProps}\n qa={qa ?? 'Tree'}\n mods={mods}\n styles={baseStyles}\n style={heightStyle}\n >\n {visibleNodes.map((node) => {\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 rowStyles={rowStyles}\n onToggleChecked={checkbox.toggle}\n />\n );\n })}\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":";;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAS,WAAW,MAAsC;AAGxD,QACE,oBAAC;EAEC,WAJF,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,OAAO,KAAK,IAAI;EAK5D,YAAY,KAAK;YAEhB,KAAK;IAJD,KAAK,IAKL;;AAIX,SAAS,oBACP,UACA,gBACU;CACV,MAAM,OAAiB,EAAE;CACzB,MAAM,SAAS,UAA8B;AAC3C,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,kBAAkB,KAAK,WAAY,MAAK,KAAK,KAAK,IAAI;AAC1D,OAAI,KAAK,SAAU,OAAM,KAAK,SAAS;;;AAG3C,OAAM,SAAS;AACf,QAAO;;;AAIT,SAAS,kBACP,MACA,UACsB;AACtB,KAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;CACvC,MAAM,MAAM,IAAI,IAAY,KAAK;AACjC,MAAK,MAAM,OAAO,MAAM;EACtB,IAAI,SAAS,SAAS,IAAI,IAAI;AAC9B,SAAO,QAAQ;AACb,OAAI,IAAI,OAAO;AACf,YAAS,SAAS,IAAI,OAAO;;;AAGjC,QAAO,MAAM,KAAK,IAAI;;;;;;AAOxB,SAAS,eACP,UACA,MACqC;AACrC,MAAK,MAAM,KAAK,KACd,KAAI,CAAC,SAAS,IAAI,EAAE,CAAE,QAAO;EAAE,KAAK;EAAG,OAAO;EAAM;AAEtD,MAAK,MAAM,KAAK,SACd,KAAI,CAAC,KAAK,IAAI,EAAE,CAAE,QAAO;EAAE,KAAK;EAAG,OAAO;EAAO;AAEnD,QAAO;;AAGT,SAAS,qBACP,eACA,cACmB;AACnB,KAAI,iBAAiB,KAAM,QAAO;AAClC,KAAI,iBAAiB,MAAO,QAAO;AACnC,QAAO;;AAGT,SAAS,SAAS,OAAsB,KAAmC;CACzE,MAAM,EACJ,UACA,cAAc,OACd,cACA,eAAe,mBACf,aAAa,OACb,qBACA,cACA,mBAAmB,OACnB,oBACA,aACA,qBACA,cACA,QACA,UACA,UACA,SACA,UACA,WACA,WACA,IACA,GAAG,eACD;CAEJ,MAAM,aAAa,cAAc,YAAY,aAAa;CAE1D,MAAM,UAAU,OAAuB,KAAK;CAE5C,MAAM,YAAY,cAAc,eAAe,SAAS,EAAE,CAAC,SAAS,CAAC;CACrE,MAAM,aAAa,UAAU;CAC7B,MAAM,WAAW,UAAU;CAE3B,MAAM,eAAe,cACb,oBAAoB,UAAU,WAAW,EAC/C,CAAC,UAAU,WAAW,CACvB;CAED,MAAM,gBAAgB,qBAAqB,mBAAmB,aAAa;CAE3E,MAAM,wBAAwB,cAE1B,mBACI,kBAAkB,cAAc,SAAS,GACzC,cACN;EAAC;EAAkB;EAAc;EAAS,CAC3C;CAED,MAAM,+BAA+B,cAEjC,mBACI,kBAAkB,qBAAqB,SAAS,GAChD,qBACN;EAAC;EAAkB;EAAqB;EAAS,CAClD;CAED,MAAM,WAAW,gBAAgB;EAC/B;EACA,OAAO;EACP;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,qBAAqB,YAAY;EACrC;EACA;EACA,qBAAqB,yBAAyB;EAC/C,CAAC;;;;;;;CAQF,MAAM,sBAAsB,OAC1B,IAAI,IAAS,yBAAyB,gCAAgC,EAAE,CAAC,CAC1E;CAED,MAAM,uBAAuB,UAAU,YAAsB;AAC3D,qBAAmB,kBAAkB,QAAQ;EAE7C,MAAM,WACJ,iBAAiB,SACb,IAAI,IAAS,yBAAyB,EAAE,CAAC,GACzC,oBAAoB;AAC1B,sBAAoB,UAAU,IAAI,IAAS,QAAQ;AAEnD,MAAI,CAAC,SAAU;EAEf,MAAM,UAAU,eAAe,UAAU,QAAQ;AACjD,MAAI,CAAC,QAAS;EAEd,MAAM,OAAO,WAAW,IAAI,OAAO,QAAQ,IAAI,CAAC;AAChD,MAAI,CAAC,KAAM;EAEX,MAAM,OAAyB;GAC7B,UAAU,QAAQ;GAClB;GACD;AACD,WAAS,MAAM,KAAK,QAAQ,EAAE,KAAK;GACnC;;;;;CAMF,MAAM,uBAAuB,OAC3B,IAAI,IAAS,gBAAgB,uBAAuB,EAAE,CAAC,CACxD;;;;;CAMD,MAAM,wBAAwB,UAAU,cAAyB;AAC/D,MAAI,CAAC,SAAU;EACf,IAAI;AACJ,MAAI,cAAc,OAAO;AAGvB,SAAM,EAAE;AACR,QAAK,MAAM,OAAO,MAAM,WAAW,SAAS,EAAE;IAC5C,MAAM,OAAO,MAAM,WAAW,QAAQ,IAAI;AAC1C,QAAI,QAAQ,KAAK,SAAS,OAAQ,KAAI,KAAK,IAAI;;QAGjD,OAAM,MAAM,KAAK,UAAU;EAG7B,MAAM,UAAU,IAAI,IAAS,IAAI;EACjC,MAAM,WACJ,iBAAiB,SACb,IAAI,IAAS,gBAAgB,EAAE,CAAC,GAChC,qBAAqB;AAC3B,uBAAqB,UAAU;EAE/B,MAAM,UAAU,eAAe,UAAU,QAAQ;AACjD,MAAI,CAAC,QAAS;EAEd,MAAM,OAAO,WAAW,IAAI,OAAO,QAAQ,IAAI,CAAC;AAChD,MAAI,CAAC,KAAM;EAEX,MAAM,gBAAgB,IACnB,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC,CAAC,CACrC,QAAQ,MAA6B,CAAC,CAAC,EAAE;EAE5C,MAAM,OAAyB;GAC7B,UAAU,QAAQ;GAClB;GACA;GACD;AAED,WAAS,KAAK,KAAK;GACnB;CAEF,MAAM,cAAc,YAAY;CAEhC,MAAM,YAAY,eACT;EACL;EACA;EACA;EACA,mBACE,eAAe,kBAAkB,SAC7B,wBACA;EACN,cAAc;EACd,qBAAqB;EACrB,kBAAkB;EAClB;EACA,kBAAkB;EAClB,OAAO;EACP,UAAU;EACV,cAAc,aAAa;EAC5B,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,YAAY,aAA+B,UAAU;CAM3D,MAAM,QAAQ,cAAc;EAC1B,MAAM,aAAa,UAAU;AAC7B,MAAI,OAAQ,WAAmB,gBAAgB,WAC7C,QAAO;EAET,MAAM,UAAU,OAAO,OAAO,WAAW;AACzC,UAAQ,eAAe,QAA+C;GACpE,MAAM,OAAO,WAAW,QAAQ,IAAI;AACpC,UAAO,OAAO,MAAM,KAAK,KAAK,WAAW,GAAG,EAAE;;AAEhD,SAAO;GAAE,GAAG;GAAW,YAAY;GAAS;IAC3C,CAAC,UAAU,CAAC;CAEf,MAAM,EAAE,cAAc,QAAQ,WAAW,OAAO,QAAQ;CAExD,MAAM,eAAyC,cAAc;EAC3D,MAAM,MAAgC,EAAE;AACxC,OAAK,MAAM,OAAO,MAAM,WAAW,SAAS,EAAE;GAC5C,MAAM,OAAO,MAAM,WAAW,QAAQ,IAAI;AAC1C,OAAI,QAAQ,KAAK,SAAS,OAAQ,KAAI,KAAK,KAAK;;AAElD,SAAO;IACN,CAAC,MAAM,WAAW,CAAC;CAEtB,MAAM,cAAc,cAEhB,UAAU,OACL,GACE,kBAAyC,GAAG,OAAO,KACrD,GACD,QACN,CAAC,OAAO,CACT;CAED,MAAM,OAAO,eACJ,EACL,cAAc,UAAU,MACzB,GACD,CAAC,OAAO,CACT;AASD,QACE,oBAAC;EACC,GANiBA,aAAW,WAAW,EACzC,KAHgB,cAAc,UAAU,KAAK,QAAQ,EAAE,CAAC,KAAK,QAAQ,CAAC,EAIvE,CAAC;EAKE,IAAI,MAAM;EACJ;EACN,QAAQ;EACR,OAAO;YAEN,aAAa,KAAK,SAAS;GAC1B,MAAM,SAAS,OAAO,KAAK,IAAI;GAC/B,MAAM,OAAO,WAAW,IAAI,OAAO;AACnC,OAAI,CAAC,KAAM,QAAO;AAClB,UACE,oBAAC;IAEO;IACA;IACC;IACM;IACb,YAAY,MAAM,aAAa,IAAI,KAAK,IAAI;IAC5C,WAAW,SAAS,WAAW,IAAI,OAAO;IAC1C,iBAAiB,SAAS,eAAe,IAAI,OAAO;IACpD,WAAW,mBAAmB,YAAY,IAAI,OAAO;IAC1C;IACX,iBAAiB,SAAS;MAVrB,KAAK,IAWV;IAEJ;GACU;;AAIlB,MAAM,QAAQ,WAAW,SAAS;AAClC,MAAM,cAAc;;;;;;;;;;;;;;;;;;;AAoBpB,MAAa,OAAO"}
@@ -0,0 +1,107 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.129.0 | Cube Dev Team */
2
+ import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
4
+ import { LoadingIcon } from "../../../icons/LoadingIcon.js";
5
+ import { DirectionIcon } from "../../../icons/DirectionIcon.js";
6
+ import { TreeNodeCheckboxWrapper, TreeNodeRow, TreeNodeToggle, TreeNodeTogglePlaceholder, TreeRowItem } from "./styled.js";
7
+ import { __Checkbox } from "../../fields/Checkbox/Checkbox.js";
8
+ import { memo, useMemo, useRef } from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ import { useHover, useTreeItem } from "react-aria";
11
+
12
+ //#region src/components/content/Tree/TreeNode.tsx
13
+ const stopPropagation = (e) => {
14
+ e.stopPropagation();
15
+ };
16
+ function TreeNodeInner(props) {
17
+ const { node, data, state, isCheckable, isExpanded, isIndeterminate, isChecked, isLoading, onToggleChecked, rowStyles } = props;
18
+ const rowRef = useRef(null);
19
+ const { rowProps, gridCellProps, expandButtonProps, isPressed } = useTreeItem({ node }, state, rowRef);
20
+ const isDisabled = state.disabledKeys.has(node.key);
21
+ const isSelected = state.selectionManager.isSelected(node.key);
22
+ const { hoverProps, isHovered } = useHover({ isDisabled });
23
+ const isFocused = state.selectionManager.isFocused && state.selectionManager.focusedKey === node.key;
24
+ const isLeaf = data.isLeaf === true || data.isLeaf !== false && !node.hasChildNodes;
25
+ const isRowCheckable = isCheckable && data.isCheckable !== false;
26
+ const handleCheckboxChange = useEvent(() => {
27
+ onToggleChecked(String(node.key));
28
+ });
29
+ const sharedMods = useMemo(() => ({
30
+ checked: isChecked,
31
+ indeterminate: isIndeterminate,
32
+ expanded: isExpanded,
33
+ loading: isLoading,
34
+ leaf: isLeaf,
35
+ "has-checkbox": isRowCheckable
36
+ }), [
37
+ isChecked,
38
+ isIndeterminate,
39
+ isExpanded,
40
+ isLoading,
41
+ isLeaf,
42
+ isRowCheckable
43
+ ]);
44
+ const rowMods = useMemo(() => ({
45
+ ...sharedMods,
46
+ disabled: isDisabled
47
+ }), [sharedMods, isDisabled]);
48
+ const itemMods = useMemo(() => ({
49
+ ...sharedMods,
50
+ focused: isFocused,
51
+ hovered: isHovered,
52
+ pressed: isPressed
53
+ }), [
54
+ sharedMods,
55
+ isFocused,
56
+ isHovered,
57
+ isPressed
58
+ ]);
59
+ const levelStyle = useMemo(() => ({ ["--tree-level"]: String(node.level ?? 0) }), [node.level]);
60
+ const ariaChecked = isRowCheckable ? isIndeterminate ? "mixed" : isChecked ? "true" : "false" : void 0;
61
+ const finalRowProps = mergeProps$1(rowProps, hoverProps, { "aria-checked": ariaChecked });
62
+ const toggleNode = isLeaf ? /* @__PURE__ */ jsx(TreeNodeTogglePlaceholder, {
63
+ "aria-hidden": true,
64
+ "data-element": "Toggle"
65
+ }) : /* @__PURE__ */ jsx(TreeNodeToggle, {
66
+ ...expandButtonProps,
67
+ tabIndex: -1,
68
+ "data-element": "Toggle",
69
+ children: isLoading ? /* @__PURE__ */ jsx(LoadingIcon, {}) : /* @__PURE__ */ jsx(DirectionIcon, { to: isExpanded ? "bottom" : "right" })
70
+ });
71
+ const checkboxNode = isRowCheckable ? /* @__PURE__ */ jsx(TreeNodeCheckboxWrapper, {
72
+ "data-element": "Checkbox",
73
+ role: "presentation",
74
+ onClick: stopPropagation,
75
+ onKeyDown: stopPropagation,
76
+ children: /* @__PURE__ */ jsx(__Checkbox, {
77
+ isSelected: isChecked,
78
+ isIndeterminate,
79
+ isDisabled: isDisabled || data.isCheckboxDisabled,
80
+ "aria-label": typeof data.title === "string" ? data.title : String(node.key),
81
+ onChange: handleCheckboxChange
82
+ })
83
+ }) : null;
84
+ return /* @__PURE__ */ jsx(TreeNodeRow, {
85
+ ...finalRowProps,
86
+ ref: rowRef,
87
+ mods: rowMods,
88
+ style: levelStyle,
89
+ "data-element": "Row",
90
+ "data-qa-key": String(node.key),
91
+ children: /* @__PURE__ */ jsx(TreeRowItem, {
92
+ ...gridCellProps,
93
+ isSelected,
94
+ isDisabled,
95
+ mods: itemMods,
96
+ icon: toggleNode,
97
+ prefix: checkboxNode,
98
+ styles: rowStyles,
99
+ children: data.title
100
+ })
101
+ });
102
+ }
103
+ const TreeNode = memo(TreeNodeInner);
104
+
105
+ //#endregion
106
+ export { TreeNode };
107
+ //# sourceMappingURL=TreeNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeNode.js","names":["mergeProps","Checkbox"],"sources":["../../../../src/components/content/Tree/TreeNode.tsx"],"sourcesContent":["import { memo, useMemo, useRef } from 'react';\nimport { useHover, useTreeItem } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { DirectionIcon, LoadingIcon } from '../../../icons';\nimport { mergeProps } from '../../../utils/react';\nimport { Checkbox } from '../../fields/Checkbox/Checkbox';\n\nimport {\n TreeNodeCheckboxWrapper,\n TreeNodeRow,\n TreeNodeToggle,\n TreeNodeTogglePlaceholder,\n TreeRowItem,\n} from './styled';\n\nimport type { Node } from '@react-types/shared';\nimport type { Styles } from '@tenphi/tasty';\nimport type { CSSProperties, SyntheticEvent } from 'react';\nimport type { TreeState } from 'react-stately';\nimport type { CubeTreeNodeData } from './types';\n\nconst stopPropagation = (e: SyntheticEvent) => {\n e.stopPropagation();\n};\n\nexport interface TreeNodeProps {\n node: Node<CubeTreeNodeData>;\n /** The original `CubeTreeNodeData` for this row, looked up by key. */\n data: CubeTreeNodeData;\n state: TreeState<CubeTreeNodeData>;\n\n /** Whether the tree as a whole renders checkboxes. */\n isCheckable: boolean;\n /** Whether this row is currently expanded. */\n isExpanded: boolean;\n /** Whether the row is in an indeterminate (half-checked) state. */\n isIndeterminate: boolean;\n /** Whether the row is fully checked. */\n isChecked: boolean;\n /** Whether `loadData` is currently fetching this row's children. */\n isLoading: boolean;\n\n /** Toggle this row's checkbox (cascades). */\n onToggleChecked: (key: string) => void;\n\n /** Styles applied to the visible row (`TreeRowItem`). */\n rowStyles?: Styles;\n}\n\nfunction TreeNodeInner(props: TreeNodeProps) {\n const {\n node,\n data,\n state,\n isCheckable,\n isExpanded,\n isIndeterminate,\n isChecked,\n isLoading,\n onToggleChecked,\n rowStyles,\n } = props;\n\n const rowRef = useRef<HTMLDivElement>(null);\n\n const { rowProps, gridCellProps, expandButtonProps, isPressed } = useTreeItem(\n { node },\n state,\n rowRef,\n );\n\n const isDisabled = state.disabledKeys.has(node.key);\n const isSelected = state.selectionManager.isSelected(node.key);\n\n // `useTreeItem` doesn't track hover; we need it for the `hovered` mod.\n const { hoverProps, isHovered } = useHover({ isDisabled });\n // React Aria's treegrid uses roving tabindex, so no `data-focused`\n // attribute lands on the row — mirror it as a mod manually.\n const isFocused =\n state.selectionManager.isFocused &&\n state.selectionManager.focusedKey === node.key;\n // For lazy rows with no children yet, still render a toggle unless\n // explicitly marked as leaf.\n const isLeaf =\n data.isLeaf === true || (data.isLeaf !== false && !node.hasChildNodes);\n const isRowCheckable = isCheckable && data.isCheckable !== false;\n\n const handleCheckboxChange = useEvent(() => {\n onToggleChecked(String(node.key));\n });\n\n const sharedMods = useMemo(\n () => ({\n checked: isChecked,\n indeterminate: isIndeterminate,\n expanded: isExpanded,\n loading: isLoading,\n leaf: isLeaf,\n 'has-checkbox': isRowCheckable,\n }),\n [isChecked, isIndeterminate, isExpanded, isLoading, isLeaf, isRowCheckable],\n );\n\n const rowMods = useMemo(\n () => ({ ...sharedMods, disabled: isDisabled }),\n [sharedMods, isDisabled],\n );\n\n const itemMods = useMemo(\n () => ({\n ...sharedMods,\n focused: isFocused,\n hovered: isHovered,\n pressed: isPressed,\n }),\n [sharedMods, isFocused, isHovered, isPressed],\n );\n\n const levelStyle = useMemo<CSSProperties>(\n () => ({\n ['--tree-level' as keyof CSSProperties]: String(node.level ?? 0),\n }),\n [node.level],\n );\n\n // Only emit `aria-checked` when the tree is in checkable mode.\n const ariaChecked: 'mixed' | 'true' | 'false' | undefined = isRowCheckable\n ? isIndeterminate\n ? 'mixed'\n : isChecked\n ? 'true'\n : 'false'\n : undefined;\n\n const finalRowProps = mergeProps(rowProps, hoverProps, {\n 'aria-checked': ariaChecked,\n });\n\n // Leaf rows get a placeholder so sibling indents align.\n const toggleNode = isLeaf ? (\n <TreeNodeTogglePlaceholder aria-hidden data-element=\"Toggle\" />\n ) : (\n <TreeNodeToggle {...expandButtonProps} tabIndex={-1} data-element=\"Toggle\">\n {isLoading ? (\n <LoadingIcon />\n ) : (\n <DirectionIcon to={isExpanded ? 'bottom' : 'right'} />\n )}\n </TreeNodeToggle>\n );\n\n const checkboxNode = isRowCheckable ? (\n <TreeNodeCheckboxWrapper\n data-element=\"Checkbox\"\n role=\"presentation\"\n onClick={stopPropagation}\n onKeyDown={stopPropagation}\n >\n <Checkbox\n isSelected={isChecked}\n isIndeterminate={isIndeterminate}\n isDisabled={isDisabled || data.isCheckboxDisabled}\n aria-label={\n typeof data.title === 'string' ? data.title : String(node.key)\n }\n // @ts-expect-error AriaCheckboxProps loses `onChange` where InputDOMProps overlaps (react-types).\n onChange={handleCheckboxChange}\n />\n </TreeNodeCheckboxWrapper>\n ) : null;\n\n return (\n <TreeNodeRow\n {...finalRowProps}\n ref={rowRef}\n mods={rowMods}\n style={levelStyle}\n data-element=\"Row\"\n data-qa-key={String(node.key)}\n >\n <TreeRowItem\n {...gridCellProps}\n isSelected={isSelected}\n isDisabled={isDisabled}\n mods={itemMods}\n icon={toggleNode}\n prefix={checkboxNode}\n styles={rowStyles}\n >\n {data.title}\n </TreeRowItem>\n </TreeNodeRow>\n );\n}\n\nexport const TreeNode = memo(TreeNodeInner);\n"],"mappings":";;;;;;;;;;;;AAsBA,MAAM,mBAAmB,MAAsB;AAC7C,GAAE,iBAAiB;;AA2BrB,SAAS,cAAc,OAAsB;CAC3C,MAAM,EACJ,MACA,MACA,OACA,aACA,YACA,iBACA,WACA,WACA,iBACA,cACE;CAEJ,MAAM,SAAS,OAAuB,KAAK;CAE3C,MAAM,EAAE,UAAU,eAAe,mBAAmB,cAAc,YAChE,EAAE,MAAM,EACR,OACA,OACD;CAED,MAAM,aAAa,MAAM,aAAa,IAAI,KAAK,IAAI;CACnD,MAAM,aAAa,MAAM,iBAAiB,WAAW,KAAK,IAAI;CAG9D,MAAM,EAAE,YAAY,cAAc,SAAS,EAAE,YAAY,CAAC;CAG1D,MAAM,YACJ,MAAM,iBAAiB,aACvB,MAAM,iBAAiB,eAAe,KAAK;CAG7C,MAAM,SACJ,KAAK,WAAW,QAAS,KAAK,WAAW,SAAS,CAAC,KAAK;CAC1D,MAAM,iBAAiB,eAAe,KAAK,gBAAgB;CAE3D,MAAM,uBAAuB,eAAe;AAC1C,kBAAgB,OAAO,KAAK,IAAI,CAAC;GACjC;CAEF,MAAM,aAAa,eACV;EACL,SAAS;EACT,eAAe;EACf,UAAU;EACV,SAAS;EACT,MAAM;EACN,gBAAgB;EACjB,GACD;EAAC;EAAW;EAAiB;EAAY;EAAW;EAAQ;EAAe,CAC5E;CAED,MAAM,UAAU,eACP;EAAE,GAAG;EAAY,UAAU;EAAY,GAC9C,CAAC,YAAY,WAAW,CACzB;CAED,MAAM,WAAW,eACR;EACL,GAAG;EACH,SAAS;EACT,SAAS;EACT,SAAS;EACV,GACD;EAAC;EAAY;EAAW;EAAW;EAAU,CAC9C;CAED,MAAM,aAAa,eACV,GACJ,iBAAwC,OAAO,KAAK,SAAS,EAAE,EACjE,GACD,CAAC,KAAK,MAAM,CACb;CAGD,MAAM,cAAsD,iBACxD,kBACE,UACA,YACE,SACA,UACJ;CAEJ,MAAM,gBAAgBA,aAAW,UAAU,YAAY,EACrD,gBAAgB,aACjB,CAAC;CAGF,MAAM,aAAa,SACjB,oBAAC;EAA0B;EAAY,gBAAa;GAAW,GAE/D,oBAAC;EAAe,GAAI;EAAmB,UAAU;EAAI,gBAAa;YAC/D,YACC,oBAAC,gBAAc,GAEf,oBAAC,iBAAc,IAAI,aAAa,WAAW,UAAW;GAEzC;CAGnB,MAAM,eAAe,iBACnB,oBAAC;EACC,gBAAa;EACb,MAAK;EACL,SAAS;EACT,WAAW;YAEX,oBAACC;GACC,YAAY;GACK;GACjB,YAAY,cAAc,KAAK;GAC/B,cACE,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,OAAO,KAAK,IAAI;GAGhE,UAAU;IACV;GACsB,GACxB;AAEJ,QACE,oBAAC;EACC,GAAI;EACJ,KAAK;EACL,MAAM;EACN,OAAO;EACP,gBAAa;EACb,eAAa,OAAO,KAAK,IAAI;YAE7B,oBAAC;GACC,GAAI;GACQ;GACA;GACZ,MAAM;GACN,MAAM;GACN,QAAQ;GACR,QAAQ;aAEP,KAAK;IACM;GACF;;AAIlB,MAAa,WAAW,KAAK,cAAc"}
@@ -0,0 +1,3 @@
1
+
2
+ import { CubeTreeNodeData, CubeTreeProps, TreeLoadDataNode, TreeOnCheckInfo, TreeOnExpandInfo, TreeOnSelectInfo, TreeSelectionMode } from "./types.js";
3
+ import { Tree } from "./Tree.js";