@cube-dev/ui-kit 0.0.0-canary-7298754 → 0.0.0-canary-cb3e2bd

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 (430) hide show
  1. package/dist/CHANGELOG.md +17 -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.d.ts +0 -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 +1 -1
  26. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  27. package/dist/components/actions/ItemActionContext.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/Item/Item.js +1 -1
  57. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  58. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  59. package/dist/components/content/Layout/GridLayout.js +1 -1
  60. package/dist/components/content/Layout/Layout.js +1 -1
  61. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  62. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  63. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  64. package/dist/components/content/Layout/LayoutContent.js +1 -1
  65. package/dist/components/content/Layout/LayoutContext.js +1 -1
  66. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  67. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  68. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  69. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  70. package/dist/components/content/Layout/LayoutPane.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  72. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  74. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  75. package/dist/components/content/Layout/index.js +1 -1
  76. package/dist/components/content/Layout/utils.js +1 -1
  77. package/dist/components/content/Paragraph.js +1 -1
  78. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  79. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  80. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  81. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  82. package/dist/components/content/Result/Result.js +1 -1
  83. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  84. package/dist/components/content/Tag/Tag.js +1 -1
  85. package/dist/components/content/Text.js +1 -1
  86. package/dist/components/content/TextItem/TextItem.js +1 -1
  87. package/dist/components/content/Title.js +1 -1
  88. package/dist/components/content/Tree/Tree.d.ts +27 -0
  89. package/dist/components/content/Tree/Tree.js +317 -0
  90. package/dist/components/content/Tree/Tree.js.map +1 -0
  91. package/dist/components/content/Tree/TreeNode.js +131 -0
  92. package/dist/components/content/Tree/TreeNode.js.map +1 -0
  93. package/dist/components/content/Tree/index.d.ts +3 -0
  94. package/dist/components/content/Tree/styled.js +163 -0
  95. package/dist/components/content/Tree/styled.js.map +1 -0
  96. package/dist/components/content/Tree/types.d.ts +145 -0
  97. package/dist/components/content/Tree/use-checkbox-tree.js +251 -0
  98. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -0
  99. package/dist/components/content/Tree/use-load-data.js +68 -0
  100. package/dist/components/content/Tree/use-load-data.js.map +1 -0
  101. package/dist/components/content/highlightText.js +1 -1
  102. package/dist/components/content/use-auto-tooltip.js +1 -1
  103. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  104. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  105. package/dist/components/fields/Checkbox/context.js +1 -1
  106. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  107. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  108. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  109. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  110. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  111. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  112. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  113. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  114. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  115. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  116. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  117. package/dist/components/fields/DatePicker/intl.js +1 -1
  118. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  119. package/dist/components/fields/DatePicker/props.js +1 -1
  120. package/dist/components/fields/DatePicker/utils.js +1 -1
  121. package/dist/components/fields/FileInput/FileInput.js +1 -1
  122. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  123. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  124. package/dist/components/fields/Input/Input.js +1 -1
  125. package/dist/components/fields/ListBox/ListBox.js +1 -1
  126. package/dist/components/fields/NumberInput/NumberInput.js +2 -2
  127. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  128. package/dist/components/fields/PasswordInput/PasswordInput.js +2 -2
  129. package/dist/components/fields/Picker/Picker.js +1 -1
  130. package/dist/components/fields/RadioGroup/Radio.js +2 -2
  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 +2 -2
  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 +1 -1
  143. package/dist/components/fields/Slider/index.js +1 -1
  144. package/dist/components/fields/Switch/Switch.js +1 -1
  145. package/dist/components/fields/TextArea/TextArea.js +2 -2
  146. package/dist/components/fields/TextInput/TextInput.js +2 -2
  147. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  148. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  149. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  150. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  151. package/dist/components/form/Form/Field.js +1 -1
  152. package/dist/components/form/Form/Form.js +1 -1
  153. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  154. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  155. package/dist/components/form/Form/SubmitError.js +1 -1
  156. package/dist/components/form/Form/index.js +1 -1
  157. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  158. package/dist/components/form/Form/use-field/use-field.js +1 -1
  159. package/dist/components/form/Form/use-form.js +1 -1
  160. package/dist/components/form/Form/validation.js +1 -1
  161. package/dist/components/form/Label.js +1 -1
  162. package/dist/components/form/wrapper.js +1 -1
  163. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  164. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  165. package/dist/components/layout/Flex.js +1 -1
  166. package/dist/components/layout/Flow.js +1 -1
  167. package/dist/components/layout/Grid.js +1 -1
  168. package/dist/components/layout/Panel.js +1 -1
  169. package/dist/components/layout/Prefix.js +1 -1
  170. package/dist/components/layout/ResizablePanel.js +1 -1
  171. package/dist/components/layout/Space.js +1 -1
  172. package/dist/components/layout/Suffix.js +1 -1
  173. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  174. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  175. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  176. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  177. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  178. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  179. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  180. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  181. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  182. package/dist/components/navigation/Tabs/styled.js +1 -1
  183. package/dist/components/navigation/Tabs/types.js +1 -1
  184. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  185. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  186. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  187. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  188. package/dist/components/other/Calendar/Calendar.js +1 -1
  189. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  190. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  191. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  192. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  193. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  194. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  195. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  196. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  197. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  198. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  199. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  200. package/dist/components/overlays/Dialog/context.js +1 -1
  201. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  202. package/dist/components/overlays/Modal/Modal.d.ts +1 -2
  203. package/dist/components/overlays/Modal/Modal.js +1 -1
  204. package/dist/components/overlays/Modal/OpenTransition.js +1 -1
  205. package/dist/components/overlays/Modal/Overlay.d.ts +0 -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.d.ts +0 -2
  214. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  215. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  216. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  217. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  218. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  219. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  220. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  221. package/dist/components/overlays/Notifications/index.js +1 -1
  222. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  223. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  224. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  225. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  226. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  227. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  228. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  229. package/dist/components/overlays/Toast/index.js +1 -1
  230. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  231. package/dist/components/overlays/Toast/useToast.js +1 -1
  232. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  233. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  234. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  235. package/dist/components/overlays/Tooltip/context.js +1 -1
  236. package/dist/components/portal/Portal.js +1 -1
  237. package/dist/components/portal/PortalProvider.js +1 -1
  238. package/dist/components/portal/index.d.ts +0 -1
  239. package/dist/components/portal/usePortal.js +1 -1
  240. package/dist/components/shared/InvalidIcon.js +1 -1
  241. package/dist/components/shared/ValidIcon.js +1 -1
  242. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  243. package/dist/components/status/Spin/Cube.js +1 -1
  244. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  245. package/dist/components/status/Spin/Spin.js +1 -1
  246. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  247. package/dist/data/item-themes.js +1 -1
  248. package/dist/data/themes.js +1 -1
  249. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  250. package/dist/icons/AdjustmentsIcon.js +1 -1
  251. package/dist/icons/AiIcon.js +1 -1
  252. package/dist/icons/AreaChartIcon.js +1 -1
  253. package/dist/icons/BackwardIcon.js +1 -1
  254. package/dist/icons/BarChartIcon.js +1 -1
  255. package/dist/icons/BellFilledIcon.js +1 -1
  256. package/dist/icons/BellIcon.js +1 -1
  257. package/dist/icons/BooleanIcon.js +1 -1
  258. package/dist/icons/CalendarEditIcon.js +1 -1
  259. package/dist/icons/CalendarIcon.js +1 -1
  260. package/dist/icons/CaretDownIcon.js +1 -1
  261. package/dist/icons/CaretUpIcon.js +1 -1
  262. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  263. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  264. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  265. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  266. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  267. package/dist/icons/ChartBarLineIcon.js +1 -1
  268. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  269. package/dist/icons/ChartBarStackedIcon.js +1 -1
  270. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  271. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  272. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  273. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  274. package/dist/icons/ChartBubbleIcon.js +1 -1
  275. package/dist/icons/ChartDonut2Icon.js +1 -1
  276. package/dist/icons/ChartFunnelIcon.js +1 -1
  277. package/dist/icons/ChartHeatmapIcon.js +1 -1
  278. package/dist/icons/ChartKPIIcon.js +1 -1
  279. package/dist/icons/ChartPie2Icon.js +1 -1
  280. package/dist/icons/ChartScatterIcon.js +1 -1
  281. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  282. package/dist/icons/CheckCircleIcon.js +1 -1
  283. package/dist/icons/CheckIcon.js +1 -1
  284. package/dist/icons/CircleFilledIcon.js +1 -1
  285. package/dist/icons/ClearIcon.js +1 -1
  286. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  287. package/dist/icons/CloseCircleIcon.js +1 -1
  288. package/dist/icons/CloseIcon.js +1 -1
  289. package/dist/icons/CodeIcon.js +1 -1
  290. package/dist/icons/ColumnTotalIcon.js +1 -1
  291. package/dist/icons/CopyIcon.js +1 -1
  292. package/dist/icons/CountIcon.js +1 -1
  293. package/dist/icons/CubeIcon.js +1 -1
  294. package/dist/icons/CubePauseIcon.js +1 -1
  295. package/dist/icons/CubePlayIcon.js +1 -1
  296. package/dist/icons/CurrencyDollarIcon.js +1 -1
  297. package/dist/icons/DangerIcon.js +1 -1
  298. package/dist/icons/DashboardIcon.js +1 -1
  299. package/dist/icons/DatabaseIcon.js +1 -1
  300. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  301. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  302. package/dist/icons/DirectionIcon.js +1 -1
  303. package/dist/icons/DonutIcon.js +1 -1
  304. package/dist/icons/DownIcon.js +1 -1
  305. package/dist/icons/EditIcon.js +1 -1
  306. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  307. package/dist/icons/ExclamationCircleIcon.js +1 -1
  308. package/dist/icons/ExclamationIcon.js +1 -1
  309. package/dist/icons/EyeIcon.js +1 -1
  310. package/dist/icons/EyeInvisibleIcon.js +1 -1
  311. package/dist/icons/FilterIcon.js +1 -1
  312. package/dist/icons/FolderFilledIcon.js +1 -1
  313. package/dist/icons/FolderIcon.js +1 -1
  314. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  315. package/dist/icons/FolderOpenIcon.js +1 -1
  316. package/dist/icons/ForwardIcon.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.d.ts +4 -1
  378. package/dist/index.js +5 -4
  379. package/dist/index.js.map +1 -1
  380. package/dist/provider.js +1 -1
  381. package/dist/providers/TrackingProvider.js +1 -1
  382. package/dist/providers/navigationAdapter.default.js +1 -1
  383. package/dist/tokens/base.js +1 -1
  384. package/dist/tokens/colors.js +1 -1
  385. package/dist/tokens/index.js +1 -1
  386. package/dist/tokens/layout.js +1 -1
  387. package/dist/tokens/shadows.js +1 -1
  388. package/dist/tokens/sizes.js +1 -1
  389. package/dist/tokens/spacing.js +1 -1
  390. package/dist/tokens/typography.js +1 -1
  391. package/dist/utils/ResizeSensor.js +1 -1
  392. package/dist/utils/is-dev-env.js +1 -1
  393. package/dist/utils/modules.js +1 -1
  394. package/dist/utils/promise.js +1 -1
  395. package/dist/utils/raf.js +1 -1
  396. package/dist/utils/random.js +1 -1
  397. package/dist/utils/range.js +1 -1
  398. package/dist/utils/react/RenderCache.js +1 -1
  399. package/dist/utils/react/Slots.js +1 -1
  400. package/dist/utils/react/chain.js +1 -1
  401. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  402. package/dist/utils/react/index.js +1 -1
  403. package/dist/utils/react/interactions.js +1 -1
  404. package/dist/utils/react/isTextOnly.js +1 -1
  405. package/dist/utils/react/mapProps.js +1 -1
  406. package/dist/utils/react/mergeProps.js +1 -1
  407. package/dist/utils/react/nullableValue.js +1 -1
  408. package/dist/utils/react/resolveIcon.js +1 -1
  409. package/dist/utils/react/sharedStore.js +1 -1
  410. package/dist/utils/react/useCombinedRefs.js +1 -1
  411. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  412. package/dist/utils/react/useEventBus.js +1 -1
  413. package/dist/utils/react/useId.js +1 -1
  414. package/dist/utils/react/useIsDarwin.js +1 -1
  415. package/dist/utils/react/useKeySymbols.js +1 -1
  416. package/dist/utils/react/useLayoutEffect.js +1 -1
  417. package/dist/utils/react/useLocalStorage.js +1 -1
  418. package/dist/utils/react/useMergeStyles.js +1 -1
  419. package/dist/utils/react/useQaProps.js +1 -1
  420. package/dist/utils/react/useViewportSize.js +1 -1
  421. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  422. package/dist/utils/selection.js +1 -1
  423. package/dist/utils/styles.js +1 -1
  424. package/dist/utils/tree.js +1 -1
  425. package/dist/utils/warnings.js +1 -1
  426. package/dist/version.js +2 -2
  427. package/docs/components/content/Tree.md +308 -0
  428. package/docs/tasty/dsl.md +1 -0
  429. package/package.json +2 -2
  430. package/dist/components/portal/PortalProvider.d.ts +0 -2
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { TEXT_PROP_MAP, _Text } from "../Text.js";
4
4
  import { highlightText } from "../highlightText.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-7298754 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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,317 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | Cube Dev Team */
2
+ import { extractStyles } from "../../../utils/styles.js";
3
+ import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
5
+ import { TreeElement } from "./styled.js";
6
+ import { TreeNode } from "./TreeNode.js";
7
+ import { useCheckboxTree } from "./use-checkbox-tree.js";
8
+ import { useLoadData } from "./use-load-data.js";
9
+ import { OUTER_STYLES } from "@tenphi/tasty";
10
+ import { forwardRef, useMemo, useRef } from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ import { useTree } from "react-aria";
13
+ import { Item, useTreeState } from "react-stately";
14
+
15
+ //#region src/components/content/Tree/Tree.tsx
16
+ /**
17
+ * Render an `<Item>` for React Stately's collection builder.
18
+ *
19
+ * The visible row content is rendered by `TreeNode` via a
20
+ * `nodesByKey` lookup, so the `<Item>`'s body is only used by
21
+ * Stately to build the collection (`textValue` for keyboard nav,
22
+ * `childItems` for nested traversal).
23
+ *
24
+ * For nested traversal to work, the `children` of the `<Tree>` must
25
+ * be passed as a *function* together with the top-level `items`
26
+ * array — see the `<Tree>` `useCollection` call below. Stately
27
+ * propagates that renderer into `childItems` so nested arrays of
28
+ * raw `CubeTreeNodeData` are turned back into `<Item>` elements.
29
+ */
30
+ function renderItem(node) {
31
+ return /* @__PURE__ */ jsx(Item, {
32
+ textValue: typeof node.title === "string" ? node.title : String(node.key),
33
+ childItems: node.children,
34
+ children: node.title
35
+ }, node.key);
36
+ }
37
+ /** Walk the treeData and build a flat `key -> node` index. */
38
+ function buildNodesByKey(treeData) {
39
+ const map = /* @__PURE__ */ new Map();
40
+ const visit = (nodes) => {
41
+ for (const node of nodes) {
42
+ map.set(node.key, node);
43
+ if (node.children) visit(node.children);
44
+ }
45
+ };
46
+ visit(treeData);
47
+ return map;
48
+ }
49
+ /** Walk the treeData and collect all keys whose `isDisabled === true`. */
50
+ function collectDisabledKeys(treeData, treeIsDisabled) {
51
+ const keys = [];
52
+ const visit = (nodes) => {
53
+ for (const node of nodes) {
54
+ if (treeIsDisabled || node.isDisabled) keys.push(node.key);
55
+ if (node.children) visit(node.children);
56
+ }
57
+ };
58
+ visit(treeData);
59
+ return keys;
60
+ }
61
+ /**
62
+ * Map `key -> parentKey` (used for `autoExpandParent`).
63
+ */
64
+ function buildParentOf(treeData) {
65
+ const parentOf = /* @__PURE__ */ new Map();
66
+ const visit = (nodes, parent) => {
67
+ for (const node of nodes) {
68
+ parentOf.set(node.key, parent);
69
+ if (node.children) visit(node.children, node.key);
70
+ }
71
+ };
72
+ visit(treeData, null);
73
+ return parentOf;
74
+ }
75
+ /**
76
+ * Expand the supplied keys with all of their ancestors. Used when
77
+ * `autoExpandParent` is `true` so that the consumer can pass deep keys
78
+ * (e.g. search matches) without having to manually walk parents.
79
+ */
80
+ function expandWithParents(keys, parentOf) {
81
+ if (!keys || keys.length === 0) return keys;
82
+ const set = new Set(keys);
83
+ for (const key of keys) {
84
+ let parent = parentOf.get(key);
85
+ while (parent) {
86
+ set.add(parent);
87
+ parent = parentOf.get(parent);
88
+ }
89
+ }
90
+ return Array.from(set);
91
+ }
92
+ /**
93
+ * Coerce the public `selectionMode` / `isSelectable` pair into a single
94
+ * `selectionMode` value for `useTreeState`.
95
+ *
96
+ * - `selectionMode` wins when both are passed.
97
+ * - `isSelectable === false` is sugar for `selectionMode='none'`.
98
+ * - `selectionMode` defaults to `'single'` (matches AntD's default).
99
+ */
100
+ function resolveSelectionMode(selectionMode, isSelectable) {
101
+ if (selectionMode != null) return selectionMode;
102
+ if (isSelectable === false) return "none";
103
+ return "single";
104
+ }
105
+ function TreeBase(props, ref) {
106
+ const { treeData, isCheckable = false, isSelectable, selectionMode: selectionModeProp, blockNode = false, isDisabled = false, defaultExpandedKeys, expandedKeys, autoExpandParent = false, defaultCheckedKeys, checkedKeys, defaultSelectedKeys, selectedKeys, height, loadData, onExpand, onCheck, onSelect, rowStyles, qa, ...otherProps } = props;
107
+ const baseStyles = extractStyles(otherProps, OUTER_STYLES);
108
+ const treeRef = useRef(null);
109
+ const nodesByKey = useMemo(() => buildNodesByKey(treeData), [treeData]);
110
+ const parentOf = useMemo(() => buildParentOf(treeData), [treeData]);
111
+ const disabledKeys = useMemo(() => collectDisabledKeys(treeData, isDisabled), [treeData, isDisabled]);
112
+ const selectionMode = resolveSelectionMode(selectionModeProp, isSelectable);
113
+ /**
114
+ * Apply `autoExpandParent` to the controlled `expandedKeys`. This is
115
+ * a one-shot thing — once the consumer responds to `onExpand` and
116
+ * sets `autoExpandParent` to `false`, we stop force-expanding parents.
117
+ */
118
+ const effectiveExpandedKeys = useMemo(() => autoExpandParent ? expandWithParents(expandedKeys, parentOf) : expandedKeys, [
119
+ autoExpandParent,
120
+ expandedKeys,
121
+ parentOf
122
+ ]);
123
+ const checkbox = useCheckboxTree({
124
+ treeData,
125
+ isCheckable,
126
+ defaultCheckedKeys,
127
+ checkedKeys,
128
+ onCheck
129
+ });
130
+ const loadDataController = useLoadData({
131
+ nodesByKey,
132
+ loadData
133
+ });
134
+ /**
135
+ * Translate Stately's `Set<Key>` callbacks into the public AntD-flavoured
136
+ * `Key[]` shape and dispatch the per-key load.
137
+ */
138
+ const handleExpandedChange = useEvent((nextSet) => {
139
+ loadDataController.onExpandedChanged(nextSet);
140
+ if (!onExpand) return;
141
+ const nextArr = Array.from(nextSet);
142
+ const previous = new Set(effectiveExpandedKeys ?? []);
143
+ /**
144
+ * Find the single key that toggled relative to the previous set.
145
+ * Useful for `info.node` and `info.expanded` — matches AntD.
146
+ */
147
+ let toggledKey = null;
148
+ let toggledExpanded = false;
149
+ for (const k of nextArr) if (!previous.has(k)) {
150
+ toggledKey = k;
151
+ toggledExpanded = true;
152
+ break;
153
+ }
154
+ if (toggledKey == null) {
155
+ for (const k of previous) if (!nextSet.has(k)) {
156
+ toggledKey = k;
157
+ toggledExpanded = false;
158
+ break;
159
+ }
160
+ }
161
+ const node = toggledKey != null ? nodesByKey.get(String(toggledKey)) : void 0;
162
+ onExpand(nextArr, {
163
+ expanded: toggledExpanded,
164
+ node: node ?? {}
165
+ });
166
+ });
167
+ const handleSelectionChange = useEvent((selection) => {
168
+ if (!onSelect) return;
169
+ const arr = selection === "all" ? Array.from(nodesByKey.keys()) : Array.from(selection);
170
+ /**
171
+ * Stately's `onSelectionChange` hands us the *next* selection only —
172
+ * we don't get a "toggled key" diff for free. For `single` mode we
173
+ * can infer it cheaply (it's the only entry); for `multiple` we
174
+ * report the most recent addition. Falls back to the first key.
175
+ */
176
+ let toggledKey = null;
177
+ let toggledSelected = false;
178
+ if (selectionMode === "single") {
179
+ toggledKey = arr[0] ?? null;
180
+ toggledSelected = arr.length > 0;
181
+ } else if (selection !== "all") {
182
+ toggledKey = arr.length > 0 ? arr[arr.length - 1] : null;
183
+ toggledSelected = arr.length > 0;
184
+ } else {
185
+ toggledKey = arr[0] ?? null;
186
+ toggledSelected = true;
187
+ }
188
+ const node = toggledKey != null ? nodesByKey.get(String(toggledKey)) : void 0;
189
+ const selectedNodes = arr.map((k) => nodesByKey.get(String(k))).filter((n) => !!n);
190
+ onSelect(arr, {
191
+ selected: toggledSelected,
192
+ node: node ?? {},
193
+ selectedNodes
194
+ });
195
+ });
196
+ /**
197
+ * Stately propagates the `children` function through `childItems`,
198
+ * so a single render function recursively turns the entire
199
+ * `treeData` array into `<Item>` elements.
200
+ */
201
+ const renderCollectionItem = useEvent((item) => renderItem(item));
202
+ const ariaProps = useMemo(() => ({
203
+ selectionMode,
204
+ selectedKeys,
205
+ defaultSelectedKeys,
206
+ onSelectionChange: onSelect && selectionMode !== "none" ? handleSelectionChange : void 0,
207
+ expandedKeys: effectiveExpandedKeys,
208
+ defaultExpandedKeys,
209
+ onExpandedChange: handleExpandedChange,
210
+ disabledKeys,
211
+ disabledBehavior: "all",
212
+ items: treeData,
213
+ children: renderCollectionItem,
214
+ "aria-label": "Tree"
215
+ }), [
216
+ selectionMode,
217
+ selectedKeys,
218
+ defaultSelectedKeys,
219
+ onSelect,
220
+ handleSelectionChange,
221
+ effectiveExpandedKeys,
222
+ defaultExpandedKeys,
223
+ handleExpandedChange,
224
+ disabledKeys,
225
+ treeData,
226
+ renderCollectionItem
227
+ ]);
228
+ const baseState = useTreeState(ariaProps);
229
+ /**
230
+ * The legacy `TreeCollection` returned by `useTreeState` doesn't
231
+ * implement `getChildren`, but `@react-aria/tree`'s `useTree`
232
+ * (via `useGridListItem`) calls it unguarded for any nested row
233
+ * (`node.level > 0`). Patch it once so `useTree` works on top of
234
+ * the legacy state without forking.
235
+ */
236
+ const state = useMemo(() => {
237
+ const collection = baseState.collection;
238
+ if (typeof collection.getChildren === "function") return baseState;
239
+ const getChildren = (key) => {
240
+ const result = [];
241
+ const node = collection.getItem(key);
242
+ if (!node) return result;
243
+ for (const child of node.childNodes) result.push(child);
244
+ return result;
245
+ };
246
+ const patched = Object.assign(Object.create(Object.getPrototypeOf(collection)), collection, { getChildren });
247
+ return {
248
+ ...baseState,
249
+ collection: patched
250
+ };
251
+ }, [baseState]);
252
+ const { gridProps } = useTree(ariaProps, state, treeRef);
253
+ /**
254
+ * Iterate the collection in DOM order. The TreeCollection only walks
255
+ * into expanded subtrees, so `getKeys()` already gives us *only*
256
+ * visible rows — no manual filtering required.
257
+ */
258
+ const visibleNodes = useMemo(() => {
259
+ const out = [];
260
+ for (const key of state.collection.getKeys()) {
261
+ const node = state.collection.getItem(key);
262
+ if (node && node.type === "item") out.push(node);
263
+ }
264
+ return out;
265
+ }, [state.collection, state.expandedKeys]);
266
+ const heightStyle = useMemo(() => height != null ? { ["--tree-height"]: `${height}px` } : void 0, [height]);
267
+ const mods = useMemo(() => ({ "has-height": height != null }), [height]);
268
+ return /* @__PURE__ */ jsx(TreeElement, {
269
+ ...mergeProps$1(gridProps, { ref: ref ?? treeRef }),
270
+ ref: ref ?? treeRef,
271
+ qa: qa ?? "Tree",
272
+ mods,
273
+ styles: baseStyles,
274
+ style: heightStyle,
275
+ children: visibleNodes.map((node) => {
276
+ const data = nodesByKey.get(String(node.key));
277
+ if (!data) return null;
278
+ return /* @__PURE__ */ jsx(TreeNode, {
279
+ node,
280
+ data,
281
+ state,
282
+ isCheckable,
283
+ isExpanded: state.expandedKeys.has(node.key),
284
+ isChecked: checkbox.checkedSet.has(String(node.key)),
285
+ isIndeterminate: checkbox.halfCheckedSet.has(String(node.key)),
286
+ isLoading: loadDataController.loadingKeys.has(String(node.key)),
287
+ isBlockNode: blockNode,
288
+ rowStyles,
289
+ onToggleChecked: checkbox.toggle
290
+ }, node.key);
291
+ })
292
+ });
293
+ }
294
+ const _Tree = forwardRef(TreeBase);
295
+ /**
296
+ * Hierarchical data display with optional checkboxes, single/multi
297
+ * selection, async lazy loading, and keyboard navigation.
298
+ *
299
+ * Built on `useTree` / `useTreeState` (React Aria + React Stately) and
300
+ * styled with Tasty.
301
+ *
302
+ * @example
303
+ * ```tsx
304
+ * <Tree
305
+ * treeData={data}
306
+ * isCheckable
307
+ * selectionMode="none"
308
+ * defaultExpandedKeys={['root']}
309
+ * onCheck={(keys) => console.log(keys)}
310
+ * />
311
+ * ```
312
+ */
313
+ const Tree = _Tree;
314
+
315
+ //#endregion
316
+ export { Tree };
317
+ //# 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 } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n\nimport { TreeElement } from './styled';\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 { CSSProperties, ForwardedRef, ReactElement } 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 row content is rendered by `TreeNode` via a\n * `nodesByKey` lookup, so the `<Item>`'s body is only used by\n * Stately to build the collection (`textValue` for keyboard nav,\n * `childItems` for nested traversal).\n *\n * For nested traversal to work, the `children` of the `<Tree>` must\n * be passed as a *function* together with the top-level `items`\n * array — see the `<Tree>` `useCollection` call below. Stately\n * propagates that renderer into `childItems` so nested arrays of\n * raw `CubeTreeNodeData` are turned back into `<Item>` elements.\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 any}\n </Item>\n );\n}\n\n/** Walk the treeData and build a flat `key -> node` index. */\nfunction buildNodesByKey(\n treeData: CubeTreeNodeData[],\n): Map<string, CubeTreeNodeData> {\n const map = new Map<string, CubeTreeNodeData>();\n const visit = (nodes: CubeTreeNodeData[]) => {\n for (const node of nodes) {\n map.set(node.key, node);\n if (node.children) visit(node.children);\n }\n };\n visit(treeData);\n return map;\n}\n\n/** Walk the treeData and collect all keys whose `isDisabled === true`. */\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/**\n * Map `key -> parentKey` (used for `autoExpandParent`).\n */\nfunction buildParentOf(\n treeData: CubeTreeNodeData[],\n): Map<string, string | null> {\n const parentOf = new Map<string, string | null>();\n const visit = (nodes: CubeTreeNodeData[], parent: string | null) => {\n for (const node of nodes) {\n parentOf.set(node.key, parent);\n if (node.children) visit(node.children, node.key);\n }\n };\n visit(treeData, null);\n return parentOf;\n}\n\n/**\n * Expand the supplied keys with all of their ancestors. Used when\n * `autoExpandParent` is `true` so that the consumer can pass deep keys\n * (e.g. search matches) without having to manually walk parents.\n */\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 * Coerce the public `selectionMode` / `isSelectable` pair into a single\n * `selectionMode` value for `useTreeState`.\n *\n * - `selectionMode` wins when both are passed.\n * - `isSelectable === false` is sugar for `selectionMode='none'`.\n * - `selectionMode` defaults to `'single'` (matches AntD's default).\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 blockNode = false,\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 qa,\n ...otherProps\n } = props;\n\n const baseStyles = extractStyles(otherProps, OUTER_STYLES);\n\n const treeRef = useRef<HTMLDivElement>(null);\n\n const nodesByKey = useMemo(() => buildNodesByKey(treeData), [treeData]);\n const parentOf = useMemo(() => buildParentOf(treeData), [treeData]);\n\n const disabledKeys = useMemo(\n () => collectDisabledKeys(treeData, isDisabled),\n [treeData, isDisabled],\n );\n\n const selectionMode = resolveSelectionMode(selectionModeProp, isSelectable);\n\n /**\n * Apply `autoExpandParent` to the controlled `expandedKeys`. This is\n * a one-shot thing — once the consumer responds to `onExpand` and\n * sets `autoExpandParent` to `false`, we stop force-expanding parents.\n */\n const effectiveExpandedKeys = useMemo(\n () =>\n autoExpandParent\n ? expandWithParents(expandedKeys, parentOf)\n : expandedKeys,\n [autoExpandParent, expandedKeys, parentOf],\n );\n\n const checkbox = useCheckboxTree({\n treeData,\n isCheckable,\n defaultCheckedKeys,\n checkedKeys,\n onCheck,\n });\n\n const loadDataController = useLoadData({ nodesByKey, loadData });\n\n /**\n * Translate Stately's `Set<Key>` callbacks into the public AntD-flavoured\n * `Key[]` shape and dispatch the per-key load.\n */\n const handleExpandedChange = useEvent((nextSet: Set<Key>) => {\n loadDataController.onExpandedChanged(nextSet);\n\n if (!onExpand) return;\n const nextArr: Key[] = Array.from(nextSet);\n const previous = new Set<Key>(effectiveExpandedKeys ?? []);\n\n /**\n * Find the single key that toggled relative to the previous set.\n * Useful for `info.node` and `info.expanded` — matches AntD.\n */\n let toggledKey: Key | null = null;\n let toggledExpanded = false;\n for (const k of nextArr) {\n if (!previous.has(k)) {\n toggledKey = k;\n toggledExpanded = true;\n break;\n }\n }\n if (toggledKey == null) {\n for (const k of previous) {\n if (!nextSet.has(k)) {\n toggledKey = k;\n toggledExpanded = false;\n break;\n }\n }\n }\n\n const node =\n toggledKey != null ? nodesByKey.get(String(toggledKey)) : undefined;\n const info: TreeOnExpandInfo = {\n expanded: toggledExpanded,\n node: node ?? ({} as CubeTreeNodeData),\n };\n onExpand(nextArr, info);\n });\n\n const handleSelectionChange = useEvent((selection: Selection) => {\n if (!onSelect) return;\n const arr: Key[] =\n selection === 'all'\n ? Array.from(nodesByKey.keys())\n : Array.from(selection);\n /**\n * Stately's `onSelectionChange` hands us the *next* selection only —\n * we don't get a \"toggled key\" diff for free. For `single` mode we\n * can infer it cheaply (it's the only entry); for `multiple` we\n * report the most recent addition. Falls back to the first key.\n */\n let toggledKey: Key | null = null;\n let toggledSelected = false;\n if (selectionMode === 'single') {\n toggledKey = arr[0] ?? null;\n toggledSelected = arr.length > 0;\n } else if (selection !== 'all') {\n toggledKey = arr.length > 0 ? arr[arr.length - 1] : null;\n toggledSelected = arr.length > 0;\n } else {\n toggledKey = arr[0] ?? null;\n toggledSelected = true;\n }\n\n const node =\n toggledKey != null ? nodesByKey.get(String(toggledKey)) : undefined;\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: toggledSelected,\n node: node ?? ({} as CubeTreeNodeData),\n selectedNodes,\n };\n\n onSelect(arr, info);\n });\n\n /**\n * Stately propagates the `children` function through `childItems`,\n * so a single render function recursively turns the entire\n * `treeData` array into `<Item>` elements.\n */\n const renderCollectionItem = useEvent((item: CubeTreeNodeData) =>\n renderItem(item),\n );\n\n const ariaProps = useMemo(\n () => ({\n selectionMode,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange:\n onSelect && selectionMode !== 'none'\n ? handleSelectionChange\n : undefined,\n expandedKeys: effectiveExpandedKeys,\n defaultExpandedKeys,\n onExpandedChange: handleExpandedChange,\n disabledKeys,\n disabledBehavior: 'all' as const,\n items: treeData,\n children: renderCollectionItem as any,\n 'aria-label': 'Tree',\n }),\n [\n selectionMode,\n selectedKeys,\n defaultSelectedKeys,\n onSelect,\n handleSelectionChange,\n effectiveExpandedKeys,\n defaultExpandedKeys,\n handleExpandedChange,\n disabledKeys,\n treeData,\n renderCollectionItem,\n ],\n );\n\n const baseState = useTreeState<CubeTreeNodeData>(ariaProps);\n\n /**\n * The legacy `TreeCollection` returned by `useTreeState` doesn't\n * implement `getChildren`, but `@react-aria/tree`'s `useTree`\n * (via `useGridListItem`) calls it unguarded for any nested row\n * (`node.level > 0`). Patch it once so `useTree` works on top of\n * the legacy state without forking.\n */\n const state = useMemo(() => {\n const collection = baseState.collection;\n if (typeof (collection as any).getChildren === 'function') {\n return baseState;\n }\n const getChildren = (key: Key): Iterable<Node<CubeTreeNodeData>> => {\n const result: Node<CubeTreeNodeData>[] = [];\n const node = collection.getItem(key);\n if (!node) return result;\n for (const child of node.childNodes) {\n result.push(child);\n }\n return result;\n };\n const patched = Object.assign(\n Object.create(Object.getPrototypeOf(collection)),\n collection,\n { getChildren },\n );\n return { ...baseState, collection: patched };\n }, [baseState]);\n\n const { gridProps } = useTree(ariaProps, state, treeRef);\n\n /**\n * Iterate the collection in DOM order. The TreeCollection only walks\n * into expanded subtrees, so `getKeys()` already gives us *only*\n * visible rows — no manual filtering required.\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, state.expandedKeys]);\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 const elementProps = mergeProps(gridProps, {\n ref: ref ?? treeRef,\n });\n\n return (\n <TreeElement\n {...elementProps}\n ref={ref ?? treeRef}\n qa={qa ?? 'Tree'}\n mods={mods}\n styles={baseStyles}\n style={heightStyle}\n >\n {visibleNodes.map((node) => {\n const data = nodesByKey.get(String(node.key));\n if (!data) return null;\n const isExpanded = state.expandedKeys.has(node.key);\n return (\n <TreeNode\n key={node.key}\n node={node}\n data={data}\n state={state}\n isCheckable={isCheckable}\n isExpanded={isExpanded}\n isChecked={checkbox.checkedSet.has(String(node.key))}\n isIndeterminate={checkbox.halfCheckedSet.has(String(node.key))}\n isLoading={loadDataController.loadingKeys.has(String(node.key))}\n isBlockNode={blockNode}\n rowStyles={rowStyles}\n onToggleChecked={checkbox.toggle}\n />\n );\n })}\n </TreeElement>\n );\n}\n\nconst _Tree = forwardRef(TreeBase);\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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"}
@@ -0,0 +1,131 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-cb3e2bd | 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 { useTreeItem } from "react-aria";
11
+
12
+ //#region src/components/content/Tree/TreeNode.tsx
13
+ const ROW_LEVEL_OFFSET = 0;
14
+ function TreeNodeInner(props) {
15
+ const { node, data, state, isCheckable, isExpanded, isIndeterminate, isChecked, isLoading, isBlockNode, onToggleChecked, rowStyles } = props;
16
+ const rowRef = useRef(null);
17
+ const { rowProps, gridCellProps, expandButtonProps } = useTreeItem({ node }, state, rowRef);
18
+ const isDisabled = state.disabledKeys.has(node.key);
19
+ const isSelected = state.selectionManager.isSelected(node.key);
20
+ /**
21
+ * `useTreeItem` reports `aria-expanded` only on rows that *can* expand
22
+ * (i.e. have child nodes in the collection). For lazy rows with no
23
+ * children loaded yet but `isLeaf !== true`, we still want to render
24
+ * a toggle so the consumer can fire `loadData`.
25
+ */
26
+ const isLeaf = data.isLeaf === true || data.isLeaf !== false && !node.hasChildNodes;
27
+ const isRowCheckable = isCheckable && data.isCheckable !== false;
28
+ const handleCheckboxClick = useEvent((e) => {
29
+ e.stopPropagation();
30
+ });
31
+ const handleCheckboxChange = useEvent(() => {
32
+ onToggleChecked(String(node.key));
33
+ });
34
+ const rowMods = useMemo(() => ({
35
+ checked: isChecked,
36
+ indeterminate: isIndeterminate,
37
+ expanded: isExpanded,
38
+ disabled: isDisabled,
39
+ loading: isLoading,
40
+ leaf: isLeaf,
41
+ "block-node": isBlockNode,
42
+ "has-checkbox": isRowCheckable
43
+ }), [
44
+ isChecked,
45
+ isIndeterminate,
46
+ isExpanded,
47
+ isDisabled,
48
+ isLoading,
49
+ isLeaf,
50
+ isBlockNode,
51
+ isRowCheckable
52
+ ]);
53
+ const itemMods = useMemo(() => ({
54
+ checked: isChecked,
55
+ indeterminate: isIndeterminate,
56
+ expanded: isExpanded,
57
+ loading: isLoading,
58
+ leaf: isLeaf,
59
+ "has-checkbox": isRowCheckable
60
+ }), [
61
+ isChecked,
62
+ isIndeterminate,
63
+ isExpanded,
64
+ isLoading,
65
+ isLeaf,
66
+ isRowCheckable
67
+ ]);
68
+ /**
69
+ * Indent each row by its depth. `node.level` is 0-based at the root.
70
+ * Pushed down via a CSS custom property so the styled element can
71
+ * compute padding without re-extracting styles per row.
72
+ */
73
+ const levelStyle = useMemo(() => ({ ["--tree-level"]: String((node.level ?? ROW_LEVEL_OFFSET) - ROW_LEVEL_OFFSET) }), [node.level]);
74
+ /**
75
+ * `aria-checked` for treegrid rows that act as multi-state checkboxes.
76
+ * Only set when the tree is checkable, so we don't pollute the row
77
+ * with checkbox semantics in select-only mode.
78
+ */
79
+ const ariaChecked = isRowCheckable ? isIndeterminate ? "mixed" : isChecked ? "true" : "false" : void 0;
80
+ const finalRowProps = mergeProps$1(rowProps, { "aria-checked": ariaChecked });
81
+ /**
82
+ * Always render a toggle slot — even for leaf rows — so siblings
83
+ * at the same indent level visually align. Leaves get a
84
+ * non-interactive placeholder (a plain div) so user clicks can't
85
+ * trigger anything.
86
+ */
87
+ const toggleNode = isLeaf ? /* @__PURE__ */ jsx(TreeNodeTogglePlaceholder, {
88
+ "aria-hidden": true,
89
+ "data-element": "Toggle"
90
+ }) : /* @__PURE__ */ jsx(TreeNodeToggle, {
91
+ ...expandButtonProps,
92
+ tabIndex: -1,
93
+ "data-element": "Toggle",
94
+ children: isLoading ? /* @__PURE__ */ jsx(LoadingIcon, {}) : /* @__PURE__ */ jsx(DirectionIcon, { to: isExpanded ? "bottom" : "right" })
95
+ });
96
+ const checkboxNode = isRowCheckable ? /* @__PURE__ */ jsx(TreeNodeCheckboxWrapper, {
97
+ "data-element": "Checkbox",
98
+ role: "presentation",
99
+ onClick: handleCheckboxClick,
100
+ onKeyDown: handleCheckboxClick,
101
+ children: /* @__PURE__ */ jsx(__Checkbox, {
102
+ isSelected: isChecked,
103
+ isIndeterminate,
104
+ isDisabled: isDisabled || data.isCheckboxDisabled,
105
+ "aria-label": typeof data.title === "string" ? data.title : String(node.key),
106
+ onChange: handleCheckboxChange
107
+ })
108
+ }) : null;
109
+ return /* @__PURE__ */ jsx(TreeNodeRow, {
110
+ ...finalRowProps,
111
+ ref: rowRef,
112
+ mods: rowMods,
113
+ style: levelStyle,
114
+ "data-element": "Row",
115
+ "data-qa-key": String(node.key),
116
+ children: /* @__PURE__ */ jsx(TreeRowItem, {
117
+ ...gridCellProps,
118
+ isSelected,
119
+ mods: itemMods,
120
+ icon: toggleNode,
121
+ prefix: checkboxNode,
122
+ styles: rowStyles,
123
+ children: data.title
124
+ })
125
+ });
126
+ }
127
+ const TreeNode = memo(TreeNodeInner);
128
+
129
+ //#endregion
130
+ export { TreeNode };
131
+ //# 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 { 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 {\n CSSProperties,\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n} from 'react';\nimport type { TreeState } from 'react-stately';\nimport type { CubeTreeNodeData } from './types';\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 /** Whether the entire tree is `blockNode`. */\n isBlockNode: 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\nconst ROW_LEVEL_OFFSET = 0; // root nodes start at level 0\n\nfunction TreeNodeInner(props: TreeNodeProps) {\n const {\n node,\n data,\n state,\n isCheckable,\n isExpanded,\n isIndeterminate,\n isChecked,\n isLoading,\n isBlockNode,\n onToggleChecked,\n rowStyles,\n } = props;\n\n const rowRef = useRef<HTMLDivElement>(null);\n\n const { rowProps, gridCellProps, expandButtonProps } = 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` reports `aria-expanded` only on rows that *can* expand\n * (i.e. have child nodes in the collection). For lazy rows with no\n * children loaded yet but `isLeaf !== true`, we still want to render\n * a toggle so the consumer can fire `loadData`.\n */\n const isLeaf =\n data.isLeaf === true || (data.isLeaf !== false && !node.hasChildNodes);\n const isRowCheckable = isCheckable && data.isCheckable !== false;\n\n const handleCheckboxClick = useEvent(\n (e: ReactMouseEvent | ReactKeyboardEvent) => {\n e.stopPropagation();\n },\n );\n\n const handleCheckboxChange = useEvent(() => {\n onToggleChecked(String(node.key));\n });\n\n const rowMods = useMemo(\n () => ({\n checked: isChecked,\n indeterminate: isIndeterminate,\n expanded: isExpanded,\n disabled: isDisabled,\n loading: isLoading,\n leaf: isLeaf,\n 'block-node': isBlockNode,\n 'has-checkbox': isRowCheckable,\n }),\n [\n isChecked,\n isIndeterminate,\n isExpanded,\n isDisabled,\n isLoading,\n isLeaf,\n isBlockNode,\n isRowCheckable,\n ],\n );\n\n const itemMods = 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 /**\n * Indent each row by its depth. `node.level` is 0-based at the root.\n * Pushed down via a CSS custom property so the styled element can\n * compute padding without re-extracting styles per row.\n */\n const levelStyle = useMemo<CSSProperties>(\n () => ({\n ['--tree-level' as keyof CSSProperties]: String(\n (node.level ?? ROW_LEVEL_OFFSET) - ROW_LEVEL_OFFSET,\n ),\n }),\n [node.level],\n );\n\n /**\n * `aria-checked` for treegrid rows that act as multi-state checkboxes.\n * Only set when the tree is checkable, so we don't pollute the row\n * with checkbox semantics in select-only mode.\n */\n const ariaChecked: ReactNode = isRowCheckable\n ? isIndeterminate\n ? 'mixed'\n : isChecked\n ? 'true'\n : 'false'\n : undefined;\n\n const finalRowProps = mergeProps(rowProps, {\n 'aria-checked': ariaChecked as string | boolean | undefined,\n });\n\n /**\n * Always render a toggle slot — even for leaf rows — so siblings\n * at the same indent level visually align. Leaves get a\n * non-interactive placeholder (a plain div) so user clicks can't\n * trigger anything.\n */\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={handleCheckboxClick}\n onKeyDown={handleCheckboxClick}\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 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":";;;;;;;;;;;;AAqDA,MAAM,mBAAmB;AAEzB,SAAS,cAAc,OAAsB;CAC3C,MAAM,EACJ,MACA,MACA,OACA,aACA,YACA,iBACA,WACA,WACA,aACA,iBACA,cACE;CAEJ,MAAM,SAAS,OAAuB,KAAK;CAE3C,MAAM,EAAE,UAAU,eAAe,sBAAsB,YACrD,EAAE,MAAM,EACR,OACA,OACD;CAED,MAAM,aAAa,MAAM,aAAa,IAAI,KAAK,IAAI;CACnD,MAAM,aAAa,MAAM,iBAAiB,WAAW,KAAK,IAAI;;;;;;;CAO9D,MAAM,SACJ,KAAK,WAAW,QAAS,KAAK,WAAW,SAAS,CAAC,KAAK;CAC1D,MAAM,iBAAiB,eAAe,KAAK,gBAAgB;CAE3D,MAAM,sBAAsB,UACzB,MAA4C;AAC3C,IAAE,iBAAiB;GAEtB;CAED,MAAM,uBAAuB,eAAe;AAC1C,kBAAgB,OAAO,KAAK,IAAI,CAAC;GACjC;CAEF,MAAM,UAAU,eACP;EACL,SAAS;EACT,eAAe;EACf,UAAU;EACV,UAAU;EACV,SAAS;EACT,MAAM;EACN,cAAc;EACd,gBAAgB;EACjB,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,WAAW,eACR;EACL,SAAS;EACT,eAAe;EACf,UAAU;EACV,SAAS;EACT,MAAM;EACN,gBAAgB;EACjB,GACD;EAAC;EAAW;EAAiB;EAAY;EAAW;EAAQ;EAAe,CAC5E;;;;;;CAOD,MAAM,aAAa,eACV,GACJ,iBAAwC,QACtC,KAAK,SAAS,oBAAoB,iBACpC,EACF,GACD,CAAC,KAAK,MAAM,CACb;;;;;;CAOD,MAAM,cAAyB,iBAC3B,kBACE,UACA,YACE,SACA,UACJ;CAEJ,MAAM,gBAAgBA,aAAW,UAAU,EACzC,gBAAgB,aACjB,CAAC;;;;;;;CAQF,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;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";