@react-fabric/data 1.0.0-beta.25 → 1.0.0-beta.27

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.
@@ -2,6 +2,7 @@
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
4
  var core = require('@react-fabric/core');
5
+ var utilities = require('@react-fabric/utilities');
5
6
  var classNames = require('classnames');
6
7
  var react = require('react');
7
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -17,16 +18,19 @@ var TreeNode = function TreeNode(_ref) {
17
18
  defaultLeafIcon = _ref.defaultLeafIcon,
18
19
  defaultNodeIcon = _ref.defaultNodeIcon,
19
20
  onToggle = _ref.onToggle,
21
+ _onClick = _ref.onClick,
20
22
  onSelect = _ref.onSelect,
21
23
  onChecked = _ref.onChecked,
22
- children = _ref.children;
24
+ children = _ref.children,
25
+ leafClassName = _ref.leafClassName,
26
+ nodeClassName = _ref.nodeClassName;
23
27
  var badgeProps = react.useMemo(function () {
24
28
  return core.getBadgeProps(node.badge);
25
29
  }, [node.badge]);
26
30
  var filler = react.useMemo(function () {
27
- return node.lines.slice(noLines ? 1 : 0).map(function (line, idx) {
31
+ return node.lines.slice(1).map(function (line, idx) {
28
32
  return /*#__PURE__*/jsxRuntime.jsx("div", {
29
- className: classNames("flex-initial self-stretch flex items-center w-6 relative before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
33
+ className: classNames("flex-initial self-stretch flex items-center w-6 relative", !noLines && line > 0 && "before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
30
34
  children: /*#__PURE__*/jsxRuntime.jsxs("svg", {
31
35
  viewBox: "0 0 24 24",
32
36
  className: "fill-tint-200",
@@ -56,10 +60,17 @@ var TreeNode = function TreeNode(_ref) {
56
60
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
57
61
  role: "treeitem",
58
62
  "aria-selected": node.selected,
59
- className: "flex flex-nowrap items-center",
63
+ className: classNames("flex flex-nowrap items-center", node.leaf ? leafClassName : nodeClassName),
60
64
  "data-testid": node["data-testid"],
61
65
  "data-test-value": node["data-test-value"],
62
- children: [filler, !node.leaf && !node.childFiltered && /*#__PURE__*/jsxRuntime.jsx("div", {
66
+ children: [filler, node.loading && /*#__PURE__*/jsxRuntime.jsx("div", {
67
+ className: "flex-initial w-6",
68
+ children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
69
+ rtlFlip: true,
70
+ icon: core.CoreIcons.spinner,
71
+ className: "animate-spin text-muted"
72
+ })
73
+ }), !node.leaf && !node.childFiltered && !node.loading && /*#__PURE__*/jsxRuntime.jsx("div", {
63
74
  className: "flex-initial w-6",
64
75
  children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
65
76
  rtlFlip: true,
@@ -80,19 +91,20 @@ var TreeNode = function TreeNode(_ref) {
80
91
  })
81
92
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
82
93
  role: "none",
83
- className: classNames("group data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", canSelect && "hover:bg-primary-50 cursor-pointer"),
94
+ className: classNames("group/tool data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", (canSelect || _onClick) && "hover:bg-primary-50 cursor-pointer"),
84
95
  "data-selected": node.selected,
85
96
  onClick: function onClick() {
86
- return canSelect ? onSelect(node.id) : canCheck ? onChecked(node.id) : onToggle(node.id);
97
+ _onClick === null || _onClick === void 0 || _onClick(node.id, node.data);
98
+ canSelect ? onSelect(node.id) : canCheck ? onChecked(node.id) : onToggle(node.id);
87
99
  },
88
- children: [nodeIcon && /*#__PURE__*/jsxRuntime.jsx("div", {
89
- className: "flex-content w-6",
90
- children: /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
100
+ children: [nodeIcon && /*#__PURE__*/jsxRuntime.jsxs("div", {
101
+ className: "flex-content w-6 self-center leading-none",
102
+ children: [/*#__PURE__*/react.isValidElement(nodeIcon) && nodeIcon, utilities.isString(nodeIcon) && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
91
103
  icon: nodeIcon,
92
104
  bg: node.iconBg,
93
105
  color: node.iconColor,
94
106
  rtlFlip: node.rtlFlip
95
- })
107
+ })]
96
108
  }), node.childSelected && !node.open && /*#__PURE__*/jsxRuntime.jsx("span", {
97
109
  className: " flex-content text-primary-500",
98
110
  children: "\u2022"
@@ -100,7 +112,7 @@ var TreeNode = function TreeNode(_ref) {
100
112
  role: "none",
101
113
  className: "flex-1 truncate",
102
114
  children: children
103
- }), node.badge && /*#__PURE__*/jsxRuntime.jsx(core.Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
115
+ }), !utilities.isEmpty(node.badge) && /*#__PURE__*/jsxRuntime.jsx(core.Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
104
116
  className: classNames("me-1 self-center flex-content bg-opacity-50", badgeProps.className)
105
117
  }))]
106
118
  })]
@@ -11,7 +11,7 @@ var types = require('./types.js');
11
11
  var useTree = require('./useTree.js');
12
12
  var jsxRuntime = require('react/jsx-runtime');
13
13
 
14
- var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "renderer", "searchable", "selectable", "matcher", "filterPlaceholder", "defaultLeafIcon", "defaultNodeIcon", "expander", "onChecked", "onLoad", "onSelect"];
14
+ var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "renderer", "searchable", "selectable", "matcher", "filterPlaceholder", "defaultLeafIcon", "defaultNodeIcon", "expander", "onChecked", "onLoad", "onSelect", "onClick", "sorter", "makeLabel", "makeIcon", "defaultExpanded", "onExpandToggle", "leafClassName", "nodeClassName"];
15
15
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
16
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
17
  var TreePanel = function TreePanel(_ref) {
@@ -31,24 +31,36 @@ var TreePanel = function TreePanel(_ref) {
31
31
  defaultNodeIcon = _ref.defaultNodeIcon,
32
32
  _ref$expander = _ref.expander,
33
33
  expander = _ref$expander === void 0 ? "box" : _ref$expander,
34
- onChecked = _ref.onChecked;
35
- _ref.onLoad;
36
- var onSelect = _ref.onSelect,
34
+ onChecked = _ref.onChecked,
35
+ onLoad = _ref.onLoad,
36
+ onSelect = _ref.onSelect,
37
+ onClick = _ref.onClick,
38
+ sorter = _ref.sorter,
39
+ makeLabel = _ref.makeLabel,
40
+ makeIcon = _ref.makeIcon,
41
+ defaultExpanded = _ref.defaultExpanded,
42
+ onExpandToggle = _ref.onExpandToggle,
43
+ leafClassName = _ref.leafClassName,
44
+ nodeClassName = _ref.nodeClassName,
37
45
  aria = _objectWithoutProperties(_ref, _excluded);
38
46
  var _useTree = useTree.useTree({
39
47
  items: items,
40
48
  checked: checked,
41
49
  selected: selected,
42
50
  matcher: matcher,
51
+ sorter: sorter,
52
+ onLoad: onLoad,
43
53
  onSelect: onSelect,
44
- onChecked: onChecked
54
+ onChecked: onChecked,
55
+ defaultExpanded: defaultExpanded,
56
+ onExpandToggle: onExpandToggle
45
57
  }),
46
58
  tree = _useTree.tree,
47
59
  toggleExpand = _useTree.toggleExpand,
48
60
  toggleCheck = _useTree.toggleCheck,
49
61
  expandAll = _useTree.expandAll,
50
62
  collapseAll = _useTree.collapseAll,
51
- select = _useTree.select,
63
+ _select = _useTree.select,
52
64
  expand = _useTree.expand,
53
65
  onFilter = _useTree.onFilter;
54
66
  var scrollerRef = react.useRef(null);
@@ -74,7 +86,7 @@ var TreePanel = function TreePanel(_ref) {
74
86
  return expand(id);
75
87
  },
76
88
  select: function select(id) {
77
- return expand(id);
89
+ return _select(id);
78
90
  }
79
91
  };
80
92
  }, []);
@@ -120,6 +132,7 @@ var TreePanel = function TreePanel(_ref) {
120
132
  height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
121
133
  }
122
134
  }), virtualItems.map(function (_ref2) {
135
+ var _makeIcon, _ref3, _ref4;
123
136
  var index = _ref2.index,
124
137
  key = _ref2.key;
125
138
  return /*#__PURE__*/jsxRuntime.jsx("div", {
@@ -132,11 +145,14 @@ var TreePanel = function TreePanel(_ref) {
132
145
  checkable: checkable,
133
146
  selectable: selectable,
134
147
  defaultLeafIcon: defaultLeafIcon,
135
- defaultNodeIcon: defaultNodeIcon,
148
+ defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
136
149
  onToggle: toggleExpand,
137
150
  onChecked: toggleCheck,
138
- onSelect: select,
139
- children: tree[index].data && (renderer === null || renderer === void 0 ? void 0 : renderer(tree[index].data)) || tree[index].label
151
+ onSelect: _select,
152
+ onClick: onClick,
153
+ leafClassName: leafClassName,
154
+ nodeClassName: nodeClassName,
155
+ children: (_ref3 = (_ref4 = tree[index].data && (renderer === null || renderer === void 0 ? void 0 : renderer(tree[index].data))) !== null && _ref4 !== void 0 ? _ref4 : makeLabel === null || makeLabel === void 0 ? void 0 : makeLabel(tree[index].data)) !== null && _ref3 !== void 0 ? _ref3 : tree[index].label
140
156
  })
141
157
  }, key);
142
158
  })]
@@ -19,39 +19,107 @@ var useTree = function useTree(_ref) {
19
19
  _ref$checked = _ref.checked,
20
20
  checked = _ref$checked === void 0 ? utilities.EMPTY_ARRAY : _ref$checked,
21
21
  selected = _ref.selected,
22
+ sorter = _ref.sorter,
22
23
  matcher = _ref.matcher,
24
+ onLoad = _ref.onLoad,
23
25
  onSelect = _ref.onSelect,
24
- onChecked = _ref.onChecked;
26
+ onChecked = _ref.onChecked,
27
+ defaultExpanded = _ref.defaultExpanded,
28
+ onExpandToggle = _ref.onExpandToggle;
25
29
  var componentEvents = react.useRef({
26
30
  onSelect: onSelect,
27
31
  onChecked: onChecked
28
32
  });
33
+ var intialExpand = react.useRef(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : utilities.EMPTY_ARRAY);
29
34
  var itemList = createItemList(items);
35
+ var fireExpandToggle = react.useCallback(function (itemMap) {
36
+ var expandedList = itemMap.filter(function (node) {
37
+ return node.open;
38
+ }).map(function (node) {
39
+ return node.id;
40
+ });
41
+ onExpandToggle === null || onExpandToggle === void 0 || onExpandToggle(expandedList);
42
+ }, [onExpandToggle]);
43
+ var loadChildren = react.useCallback(function (node) {
44
+ var _node$children;
45
+ if (node.open && !node.leaf && !((_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length)) {
46
+ node.loading = true;
47
+ void Promise.resolve(onLoad === null || onLoad === void 0 ? void 0 : onLoad(node.id)).then(function () {
48
+ var resp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : utilities.EMPTY_ARRAY;
49
+ node.children = utils.refactorTree(resp, {
50
+ sorter: sorter,
51
+ defaultExpanded: defaultExpanded
52
+ }, {
53
+ level: node.level + 1,
54
+ parent: node.id
55
+ });
56
+ })["finally"](function () {
57
+ var _intialExpand$current;
58
+ node.loading = false;
59
+ dispatch({
60
+ type: "loaded"
61
+ });
62
+ ((_intialExpand$current = intialExpand.current) === null || _intialExpand$current === void 0 ? void 0 : _intialExpand$current.length) > 0 && dispatch({
63
+ type: "expand",
64
+ id: intialExpand.current.shift()
65
+ });
66
+ });
67
+ } else {
68
+ var _intialExpand$current2;
69
+ dispatch({
70
+ type: "loaded"
71
+ });
72
+ ((_intialExpand$current2 = intialExpand.current) === null || _intialExpand$current2 === void 0 ? void 0 : _intialExpand$current2.length) > 0 && dispatch({
73
+ type: "expand",
74
+ id: intialExpand.current.shift()
75
+ });
76
+ }
77
+ }, [onLoad]);
30
78
  var _useReducer = react.useReducer(function (state, action) {
31
79
  if (action.type === "load") {
32
- state.items = utils.refactorTree(action.items);
80
+ state.items = utils.refactorTree(action.items, {
81
+ sorter: sorter,
82
+ defaultExpanded: defaultExpanded
83
+ });
33
84
  state.itemMap = utils.makeTreeMap(state.items);
34
85
  state.tree = utils.flattenTree(state.items);
35
86
  return _objectSpread({}, state);
36
87
  }
37
88
  if (action.type === "toggleExpand") {
38
89
  var node = state.itemMap.get(action.id);
39
- node && (node.open = !node.open);
90
+ if (node && !node.leaf) {
91
+ node && (node.open = !node.open);
92
+ loadChildren(node);
93
+ return _objectSpread({}, state);
94
+ }
95
+ }
96
+ if (action.type === "loaded") {
97
+ state.itemMap = utils.makeTreeMap(state.items);
98
+ fireExpandToggle(Array.from(state.itemMap.values()));
40
99
  state.tree = utils.flattenTree(state.items);
100
+ state.selected && utils.updateSelection(state.itemMap, state.selected, true);
41
101
  return _objectSpread({}, state);
42
102
  }
43
103
  if (action.type === "expand") {
44
- // TODO: check if children available, if not call onLoad to fetch node children
45
104
  var _node = state.itemMap.get(action.id);
46
- _node && (_node.open = true);
47
- state.tree = utils.flattenTree(state.items);
48
- return _objectSpread({}, state);
105
+ if (_node && !_node.leaf) {
106
+ _node.open = true;
107
+ var parentId = _node.parent;
108
+ while (parentId) {
109
+ var _node2 = state.itemMap.get(parentId);
110
+ _node2 && (_node2.open = true);
111
+ parentId = _node2 === null || _node2 === void 0 ? void 0 : _node2.parent;
112
+ }
113
+ loadChildren(_node);
114
+ return _objectSpread({}, state);
115
+ }
49
116
  }
50
117
  if (action.type === "expandAll") {
51
- // TODO: prevent opening dynamic nodes that dont have children
52
118
  state.itemMap.forEach(function (node) {
53
- !node.leaf && (node.open = true);
119
+ var _node$children2;
120
+ !node.leaf && ((_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2.length) && (node.open = true);
54
121
  });
122
+ fireExpandToggle(Array.from(state.itemMap.values()));
55
123
  state.tree = utils.flattenTree(state.items);
56
124
  return _objectSpread({}, state);
57
125
  }
@@ -59,6 +127,7 @@ var useTree = function useTree(_ref) {
59
127
  state.itemMap.forEach(function (node) {
60
128
  !node.leaf && (node.open = false);
61
129
  });
130
+ fireExpandToggle([]);
62
131
  state.tree = utils.flattenTree(state.items);
63
132
  return _objectSpread({}, state);
64
133
  }
@@ -68,13 +137,13 @@ var useTree = function useTree(_ref) {
68
137
  return _objectSpread({}, state);
69
138
  }
70
139
  if (action.type === "select") {
71
- var _componentEvents$curr, _componentEvents$curr2;
140
+ var _componentEvents$curr, _componentEvents$curr2, _state$itemMap$get;
72
141
  if (state.selected) {
73
142
  utils.updateSelection(state.itemMap, state.selected);
74
143
  }
75
144
  utils.updateSelection(state.itemMap, action.id, true);
76
145
  state.tree = utils.flattenTree(state.items);
77
- (_componentEvents$curr = (_componentEvents$curr2 = componentEvents.current).onSelect) === null || _componentEvents$curr === void 0 || _componentEvents$curr.call(_componentEvents$curr2, action.id);
146
+ (_componentEvents$curr = (_componentEvents$curr2 = componentEvents.current).onSelect) === null || _componentEvents$curr === void 0 || _componentEvents$curr.call(_componentEvents$curr2, action.id, (_state$itemMap$get = state.itemMap.get(action.id)) === null || _state$itemMap$get === void 0 ? void 0 : _state$itemMap$get.data);
78
147
  return _objectSpread(_objectSpread({}, state), {}, {
79
148
  selected: action.id
80
149
  });
@@ -116,10 +185,15 @@ var useTree = function useTree(_ref) {
116
185
  };
117
186
  }, [onSelect, onChecked]);
118
187
  react.useEffect(function () {
188
+ var _intialExpand$current3;
119
189
  dispatch({
120
190
  type: "load",
121
191
  items: itemList
122
192
  });
193
+ ((_intialExpand$current3 = intialExpand.current) === null || _intialExpand$current3 === void 0 ? void 0 : _intialExpand$current3.length) > 0 && dispatch({
194
+ type: "expand",
195
+ id: intialExpand.current.shift()
196
+ });
123
197
  }, [itemList]);
124
198
  react.useEffect(function () {
125
199
  selected && dispatch({
@@ -6,7 +6,7 @@ var utilities = require('@react-fabric/utilities');
6
6
 
7
7
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
8
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
- var sorter = function sorter(a, b) {
9
+ var defaultSorter = function defaultSorter(a, b) {
10
10
  if (!!a.leaf !== !!b.leaf) return a.leaf ? 1 : -1;
11
11
  return utilities.compareValues()(a.label, b.label);
12
12
  };
@@ -28,15 +28,21 @@ var getIntermediate = function getIntermediate() {
28
28
  };
29
29
 
30
30
  // convert node item to internal node used by the tree
31
- var refactorTree = function refactorTree(nodes) {
32
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
31
+ var refactorTree = function refactorTree(nodes, _ref) {
32
+ var _ref$sorter = _ref.sorter,
33
+ sorter = _ref$sorter === void 0 ? defaultSorter : _ref$sorter,
34
+ _ref$defaultExpanded = _ref.defaultExpanded,
35
+ defaultExpanded = _ref$defaultExpanded === void 0 ? [] : _ref$defaultExpanded;
36
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
33
37
  level: 0,
34
38
  parent: undefined
35
39
  };
36
40
  var list = [];
37
- nodes.sort(sorter).forEach(function (node) {
41
+ if (sorter !== false) nodes = nodes.sort(sorter);
42
+ nodes.forEach(function (node) {
38
43
  list.push(_objectSpread(_objectSpread({
39
44
  open: false,
45
+ // defaultExpanded.includes(node.id),
40
46
  level: options.level,
41
47
  parent: options.parent,
42
48
  checked: 0,
@@ -47,6 +53,9 @@ var refactorTree = function refactorTree(nodes) {
47
53
  }, node), {}, {
48
54
  leaf: !!node.leaf,
49
55
  children: node.children && refactorTree(node.children, {
56
+ sorter: sorter,
57
+ defaultExpanded: defaultExpanded
58
+ }, {
50
59
  level: options.level + 1,
51
60
  parent: node.id
52
61
  })
@@ -2,8 +2,9 @@
2
2
 
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
4
  import { getBadgeProps, Icon, CoreIcons, Badge } from '@react-fabric/core';
5
+ import { isString, isEmpty } from '@react-fabric/utilities';
5
6
  import classNames from 'classnames';
6
- import { useMemo } from 'react';
7
+ import { useMemo, isValidElement } from 'react';
7
8
  import { jsx, jsxs } from 'react/jsx-runtime';
8
9
 
9
10
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -17,16 +18,19 @@ var TreeNode = function TreeNode(_ref) {
17
18
  defaultLeafIcon = _ref.defaultLeafIcon,
18
19
  defaultNodeIcon = _ref.defaultNodeIcon,
19
20
  onToggle = _ref.onToggle,
21
+ _onClick = _ref.onClick,
20
22
  onSelect = _ref.onSelect,
21
23
  onChecked = _ref.onChecked,
22
- children = _ref.children;
24
+ children = _ref.children,
25
+ leafClassName = _ref.leafClassName,
26
+ nodeClassName = _ref.nodeClassName;
23
27
  var badgeProps = useMemo(function () {
24
28
  return getBadgeProps(node.badge);
25
29
  }, [node.badge]);
26
30
  var filler = useMemo(function () {
27
- return node.lines.slice(noLines ? 1 : 0).map(function (line, idx) {
31
+ return node.lines.slice(1).map(function (line, idx) {
28
32
  return /*#__PURE__*/jsx("div", {
29
- className: classNames("flex-initial self-stretch flex items-center w-6 relative before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
33
+ className: classNames("flex-initial self-stretch flex items-center w-6 relative", !noLines && line > 0 && "before:absolute before:top-0 before:start-[7px] before:bg-tint-200 before:min-h-[50%] before:w-[2px] before:scale-x-[.625]", !noLines && line !== 2 && "before:h-full"),
30
34
  children: /*#__PURE__*/jsxs("svg", {
31
35
  viewBox: "0 0 24 24",
32
36
  className: "fill-tint-200",
@@ -56,10 +60,17 @@ var TreeNode = function TreeNode(_ref) {
56
60
  return /*#__PURE__*/jsxs("div", {
57
61
  role: "treeitem",
58
62
  "aria-selected": node.selected,
59
- className: "flex flex-nowrap items-center",
63
+ className: classNames("flex flex-nowrap items-center", node.leaf ? leafClassName : nodeClassName),
60
64
  "data-testid": node["data-testid"],
61
65
  "data-test-value": node["data-test-value"],
62
- children: [filler, !node.leaf && !node.childFiltered && /*#__PURE__*/jsx("div", {
66
+ children: [filler, node.loading && /*#__PURE__*/jsx("div", {
67
+ className: "flex-initial w-6",
68
+ children: /*#__PURE__*/jsx(Icon, {
69
+ rtlFlip: true,
70
+ icon: CoreIcons.spinner,
71
+ className: "animate-spin text-muted"
72
+ })
73
+ }), !node.leaf && !node.childFiltered && !node.loading && /*#__PURE__*/jsx("div", {
63
74
  className: "flex-initial w-6",
64
75
  children: /*#__PURE__*/jsx(Icon, {
65
76
  rtlFlip: true,
@@ -80,19 +91,20 @@ var TreeNode = function TreeNode(_ref) {
80
91
  })
81
92
  }), /*#__PURE__*/jsxs("div", {
82
93
  role: "none",
83
- className: classNames("group data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", canSelect && "hover:bg-primary-50 cursor-pointer"),
94
+ className: classNames("group/tool data-[selected]:bg-primary-100 flex flex-nowrap flex-1 overflow-hidden select-none", node.childSelected && "font-medium", (canSelect || _onClick) && "hover:bg-primary-50 cursor-pointer"),
84
95
  "data-selected": node.selected,
85
96
  onClick: function onClick() {
86
- return canSelect ? onSelect(node.id) : canCheck ? onChecked(node.id) : onToggle(node.id);
97
+ _onClick === null || _onClick === void 0 || _onClick(node.id, node.data);
98
+ canSelect ? onSelect(node.id) : canCheck ? onChecked(node.id) : onToggle(node.id);
87
99
  },
88
- children: [nodeIcon && /*#__PURE__*/jsx("div", {
89
- className: "flex-content w-6",
90
- children: /*#__PURE__*/jsx(Icon, {
100
+ children: [nodeIcon && /*#__PURE__*/jsxs("div", {
101
+ className: "flex-content w-6 self-center leading-none",
102
+ children: [/*#__PURE__*/isValidElement(nodeIcon) && nodeIcon, isString(nodeIcon) && /*#__PURE__*/jsx(Icon, {
91
103
  icon: nodeIcon,
92
104
  bg: node.iconBg,
93
105
  color: node.iconColor,
94
106
  rtlFlip: node.rtlFlip
95
- })
107
+ })]
96
108
  }), node.childSelected && !node.open && /*#__PURE__*/jsx("span", {
97
109
  className: " flex-content text-primary-500",
98
110
  children: "\u2022"
@@ -100,7 +112,7 @@ var TreeNode = function TreeNode(_ref) {
100
112
  role: "none",
101
113
  className: "flex-1 truncate",
102
114
  children: children
103
- }), node.badge && /*#__PURE__*/jsx(Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
115
+ }), !isEmpty(node.badge) && /*#__PURE__*/jsx(Badge, _objectSpread(_objectSpread({}, badgeProps), {}, {
104
116
  className: classNames("me-1 self-center flex-content bg-opacity-50", badgeProps.className)
105
117
  }))]
106
118
  })]
@@ -11,7 +11,7 @@ import { iconExpandAll, iconCollapseAll } from './types.js';
11
11
  import { useTree } from './useTree.js';
12
12
  import { jsxs, jsx } from 'react/jsx-runtime';
13
13
 
14
- var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "renderer", "searchable", "selectable", "matcher", "filterPlaceholder", "defaultLeafIcon", "defaultNodeIcon", "expander", "onChecked", "onLoad", "onSelect"];
14
+ var _excluded = ["ref", "items", "selected", "checked", "checkable", "noLines", "renderer", "searchable", "selectable", "matcher", "filterPlaceholder", "defaultLeafIcon", "defaultNodeIcon", "expander", "onChecked", "onLoad", "onSelect", "onClick", "sorter", "makeLabel", "makeIcon", "defaultExpanded", "onExpandToggle", "leafClassName", "nodeClassName"];
15
15
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
16
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
17
  var TreePanel = function TreePanel(_ref) {
@@ -31,24 +31,36 @@ var TreePanel = function TreePanel(_ref) {
31
31
  defaultNodeIcon = _ref.defaultNodeIcon,
32
32
  _ref$expander = _ref.expander,
33
33
  expander = _ref$expander === void 0 ? "box" : _ref$expander,
34
- onChecked = _ref.onChecked;
35
- _ref.onLoad;
36
- var onSelect = _ref.onSelect,
34
+ onChecked = _ref.onChecked,
35
+ onLoad = _ref.onLoad,
36
+ onSelect = _ref.onSelect,
37
+ onClick = _ref.onClick,
38
+ sorter = _ref.sorter,
39
+ makeLabel = _ref.makeLabel,
40
+ makeIcon = _ref.makeIcon,
41
+ defaultExpanded = _ref.defaultExpanded,
42
+ onExpandToggle = _ref.onExpandToggle,
43
+ leafClassName = _ref.leafClassName,
44
+ nodeClassName = _ref.nodeClassName,
37
45
  aria = _objectWithoutProperties(_ref, _excluded);
38
46
  var _useTree = useTree({
39
47
  items: items,
40
48
  checked: checked,
41
49
  selected: selected,
42
50
  matcher: matcher,
51
+ sorter: sorter,
52
+ onLoad: onLoad,
43
53
  onSelect: onSelect,
44
- onChecked: onChecked
54
+ onChecked: onChecked,
55
+ defaultExpanded: defaultExpanded,
56
+ onExpandToggle: onExpandToggle
45
57
  }),
46
58
  tree = _useTree.tree,
47
59
  toggleExpand = _useTree.toggleExpand,
48
60
  toggleCheck = _useTree.toggleCheck,
49
61
  expandAll = _useTree.expandAll,
50
62
  collapseAll = _useTree.collapseAll,
51
- select = _useTree.select,
63
+ _select = _useTree.select,
52
64
  expand = _useTree.expand,
53
65
  onFilter = _useTree.onFilter;
54
66
  var scrollerRef = useRef(null);
@@ -74,7 +86,7 @@ var TreePanel = function TreePanel(_ref) {
74
86
  return expand(id);
75
87
  },
76
88
  select: function select(id) {
77
- return expand(id);
89
+ return _select(id);
78
90
  }
79
91
  };
80
92
  }, []);
@@ -120,6 +132,7 @@ var TreePanel = function TreePanel(_ref) {
120
132
  height: (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start
121
133
  }
122
134
  }), virtualItems.map(function (_ref2) {
135
+ var _makeIcon, _ref3, _ref4;
123
136
  var index = _ref2.index,
124
137
  key = _ref2.key;
125
138
  return /*#__PURE__*/jsx("div", {
@@ -132,11 +145,14 @@ var TreePanel = function TreePanel(_ref) {
132
145
  checkable: checkable,
133
146
  selectable: selectable,
134
147
  defaultLeafIcon: defaultLeafIcon,
135
- defaultNodeIcon: defaultNodeIcon,
148
+ defaultNodeIcon: (_makeIcon = makeIcon === null || makeIcon === void 0 ? void 0 : makeIcon(tree[index].data)) !== null && _makeIcon !== void 0 ? _makeIcon : defaultNodeIcon,
136
149
  onToggle: toggleExpand,
137
150
  onChecked: toggleCheck,
138
- onSelect: select,
139
- children: tree[index].data && (renderer === null || renderer === void 0 ? void 0 : renderer(tree[index].data)) || tree[index].label
151
+ onSelect: _select,
152
+ onClick: onClick,
153
+ leafClassName: leafClassName,
154
+ nodeClassName: nodeClassName,
155
+ children: (_ref3 = (_ref4 = tree[index].data && (renderer === null || renderer === void 0 ? void 0 : renderer(tree[index].data))) !== null && _ref4 !== void 0 ? _ref4 : makeLabel === null || makeLabel === void 0 ? void 0 : makeLabel(tree[index].data)) !== null && _ref3 !== void 0 ? _ref3 : tree[index].label
140
156
  })
141
157
  }, key);
142
158
  })]