@splunk/react-ui 4.45.0 → 4.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/Code.js +210 -180
- package/JSONTree.js +50 -50
- package/Table.js +991 -970
- package/Tree.js +43 -43
- package/package.json +2 -2
- package/types/src/Code/Code.d.ts +1 -1
- package/types/src/Table/HeadCell.d.ts +4 -0
- package/types/src/Table/HeadInner.d.ts +3 -1
- package/types/src/Tree/{TreeItem.d.ts → Item.d.ts} +3 -3
- package/types/src/Tree/Tree.d.ts +3 -4
- package/types/src/Tree/TreeContext.d.ts +1 -1
- package/types/src/Tree/index.d.ts +1 -1
package/Tree.js
CHANGED
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
n.r(t);
|
|
109
109
|
// EXPORTS
|
|
110
110
|
n.d(t, {
|
|
111
|
-
|
|
111
|
+
Item: () => /* reexport */ x,
|
|
112
112
|
default: () => /* reexport */ re
|
|
113
113
|
});
|
|
114
114
|
// EXTERNAL MODULE: external "react"
|
|
@@ -129,14 +129,14 @@
|
|
|
129
129
|
var f = n.n(c);
|
|
130
130
|
// EXTERNAL MODULE: external "@splunk/themes"
|
|
131
131
|
var d = n(3563);
|
|
132
|
-
// CONCATENATED MODULE: ./src/Tree/
|
|
132
|
+
// CONCATENATED MODULE: ./src/Tree/ItemStyles.ts
|
|
133
133
|
var v = f().span.withConfig({
|
|
134
|
-
displayName: "
|
|
135
|
-
componentId: "
|
|
134
|
+
displayName: "ItemStyles__StyledTreeItemContent",
|
|
135
|
+
componentId: "sc-1ig9nmy-0"
|
|
136
136
|
})([ "font-family:inherit;" ]);
|
|
137
137
|
var s = f().span.withConfig({
|
|
138
|
-
displayName: "
|
|
139
|
-
componentId: "
|
|
138
|
+
displayName: "ItemStyles__StyledTreeItemNode",
|
|
139
|
+
componentId: "sc-1ig9nmy-1"
|
|
140
140
|
})([ "&:focus{box-shadow:", ";outline:0;&:active{box-shadow:none;}}" ], d.variables.focusShadow);
|
|
141
141
|
// CONCATENATED MODULE: ./src/Tree/TreeStyles.ts
|
|
142
142
|
var p = f().ul.withConfig({
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
var r = e.$defaultIndent;
|
|
147
147
|
return r && (0, c.css)([ "padding-left:", ";" ], d.variables.spacingXXXLarge);
|
|
148
148
|
}));
|
|
149
|
-
// CONCATENATED MODULE: ./src/Tree/
|
|
149
|
+
// CONCATENATED MODULE: ./src/Tree/Item.tsx
|
|
150
150
|
function y() {
|
|
151
151
|
return y = Object.assign ? Object.assign.bind() : function(e) {
|
|
152
152
|
for (var r = 1; r < arguments.length; r++) {
|
|
@@ -240,46 +240,46 @@
|
|
|
240
240
|
};
|
|
241
241
|
function A(n) {
|
|
242
242
|
var t = n.id, o = n.children, a = n.content, i = n.customIndent, l = n.endAdornment, c = n.labelledBy, f = n.onFocus, d = n.onKeyDown, b = n.onToggle, g = n.open, h = g === void 0 ? true : g, I = n.toggle, w = S(n, [ "id", "children", "content", "customIndent", "endAdornment", "labelledBy", "onFocus", "onKeyDown", "onToggle", "open", "toggle" ]);
|
|
243
|
-
var O = (0, e.useContext)(u), j = O.defaultIndent, A = j === void 0 ? true : j, x = O.onItemKeyDown, E = O.onItemClick, P = O.removeNode, k = O.setNode,
|
|
244
|
-
var
|
|
243
|
+
var O = (0, e.useContext)(u), j = O.defaultIndent, A = j === void 0 ? true : j, x = O.onItemKeyDown, E = O.onItemClick, P = O.removeNode, k = O.setNode, C = O.itemPaths, D = O.focusedItemId;
|
|
244
|
+
var T = (0, e.useState)(h), _ = m(T, 2), M = _[0], N = _[1];
|
|
245
245
|
// make first tree item tabbable
|
|
246
|
-
var $ = (0, e.useState)((
|
|
246
|
+
var $ = (0, e.useState)((C === null || C === void 0 ? void 0 : C.get("".concat(t))) === "0" ? 0 : -1), K = m($, 2), F = K[0], q = K[1];
|
|
247
247
|
var B = (0, e.useRef)(null);
|
|
248
248
|
var U = (0, e.useRef)(null);
|
|
249
249
|
var X = e.Children.toArray(o).filter(e.isValidElement);
|
|
250
250
|
X.forEach((function(e, r) {
|
|
251
251
|
if (e.props.id) {
|
|
252
252
|
if (M && k) {
|
|
253
|
-
k("".concat(e.props.id), "".concat(
|
|
253
|
+
k("".concat(e.props.id), "".concat(C === null || C === void 0 ? void 0 : C.get("".concat(t)), "-").concat(r));
|
|
254
254
|
} else if (P) {
|
|
255
255
|
P(e.props.id);
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
}));
|
|
259
|
-
var
|
|
259
|
+
var L = function e(r, n) {
|
|
260
260
|
N(r);
|
|
261
261
|
b === null || b === void 0 ? void 0 : b(r, n);
|
|
262
262
|
};
|
|
263
|
-
var
|
|
263
|
+
var R = function e(r) {
|
|
264
264
|
E === null || E === void 0 ? void 0 : E(r, t);
|
|
265
265
|
};
|
|
266
|
-
var
|
|
266
|
+
var V = function e(r) {
|
|
267
267
|
var n;
|
|
268
268
|
r.stopPropagation();
|
|
269
269
|
B === null || B === void 0 ? void 0 : (n = B.current) === null || n === void 0 ? void 0 : n.focus();
|
|
270
270
|
f === null || f === void 0 ? void 0 : f(r);
|
|
271
271
|
};
|
|
272
|
-
var
|
|
273
|
-
if ((
|
|
272
|
+
var z = function e() {
|
|
273
|
+
if ((C === null || C === void 0 ? void 0 : C.get("".concat(t))) === "0") {
|
|
274
274
|
q(0);
|
|
275
275
|
}
|
|
276
276
|
};
|
|
277
277
|
(0, e.useEffect)((function() {
|
|
278
|
-
if (
|
|
278
|
+
if (D === t) {
|
|
279
279
|
var e;
|
|
280
280
|
U === null || U === void 0 ? void 0 : (e = U.current) === null || e === void 0 ? void 0 : e.focus();
|
|
281
281
|
}
|
|
282
|
-
}), [
|
|
282
|
+
}), [ D, U ]);
|
|
283
283
|
var G = function e(r) {
|
|
284
284
|
r.stopPropagation();
|
|
285
285
|
};
|
|
@@ -287,10 +287,10 @@
|
|
|
287
287
|
r.stopPropagation();
|
|
288
288
|
// Used to ensure first item in Tree is tab navigable, i.e. in JSONTree when focus is manually set to the root item,
|
|
289
289
|
// this allows user to tab backwards to previous item. Tab index is reset to 0 onBlur.
|
|
290
|
-
if (r.shiftKey && r.key === "Tab" && (
|
|
290
|
+
if (r.shiftKey && r.key === "Tab" && (C === null || C === void 0 ? void 0 : C.get("".concat(t))) === "0") {
|
|
291
291
|
q(-1);
|
|
292
292
|
}
|
|
293
|
-
x === null || x === void 0 ? void 0 : x(r, t, M, X,
|
|
293
|
+
x === null || x === void 0 ? void 0 : x(r, t, M, X, L);
|
|
294
294
|
d === null || d === void 0 ? void 0 : d(r);
|
|
295
295
|
};
|
|
296
296
|
var J = function r() {
|
|
@@ -301,8 +301,8 @@
|
|
|
301
301
|
return (0, e.cloneElement)(I, {
|
|
302
302
|
onClick: function e(r) {
|
|
303
303
|
var n, t;
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
L(!M, r);
|
|
305
|
+
R(r);
|
|
306
306
|
(n = (t = I.props).onClick) === null || n === void 0 ? void 0 : n.call(t, r);
|
|
307
307
|
},
|
|
308
308
|
"aria-expanded": M
|
|
@@ -312,8 +312,8 @@
|
|
|
312
312
|
return r().createElement("li", y({}, w, {
|
|
313
313
|
ref: U,
|
|
314
314
|
tabIndex: F,
|
|
315
|
-
onBlur:
|
|
316
|
-
onFocus:
|
|
315
|
+
onBlur: z,
|
|
316
|
+
onFocus: V,
|
|
317
317
|
onKeyDown: H,
|
|
318
318
|
role: "treeitem",
|
|
319
319
|
"aria-labelledby": c,
|
|
@@ -322,7 +322,7 @@
|
|
|
322
322
|
ref: B,
|
|
323
323
|
tabIndex: -1,
|
|
324
324
|
onFocus: G,
|
|
325
|
-
onClick:
|
|
325
|
+
onClick: R
|
|
326
326
|
}, r().createElement(v, null, a), J(), !M && l), M && r().createElement(r().Fragment, null, r().createElement(p, {
|
|
327
327
|
role: "group",
|
|
328
328
|
$defaultIndent: A
|
|
@@ -332,26 +332,26 @@
|
|
|
332
332
|
/* harmony default export */ const x = A;
|
|
333
333
|
// CONCATENATED MODULE: ./src/Tree/treeUtils.ts
|
|
334
334
|
function E(e, r) {
|
|
335
|
-
return
|
|
335
|
+
return T(e) || D(e, r) || k(e, r) || P();
|
|
336
336
|
}
|
|
337
337
|
function P() {
|
|
338
338
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
339
339
|
}
|
|
340
340
|
function k(e, r) {
|
|
341
341
|
if (e) {
|
|
342
|
-
if ("string" == typeof e) return
|
|
342
|
+
if ("string" == typeof e) return C(e, r);
|
|
343
343
|
var n = {}.toString.call(e).slice(8, -1);
|
|
344
|
-
return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ?
|
|
344
|
+
return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? C(e, r) : void 0;
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
|
-
function
|
|
347
|
+
function C(e, r) {
|
|
348
348
|
(null == r || r > e.length) && (r = e.length);
|
|
349
349
|
for (var n = 0, t = Array(r); n < r; n++) {
|
|
350
350
|
t[n] = e[n];
|
|
351
351
|
}
|
|
352
352
|
return t;
|
|
353
353
|
}
|
|
354
|
-
function
|
|
354
|
+
function D(e, r) {
|
|
355
355
|
var n = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
|
|
356
356
|
if (null != n) {
|
|
357
357
|
var t, o, a, i, l = [], u = !0, c = !1;
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
return l;
|
|
374
374
|
}
|
|
375
375
|
}
|
|
376
|
-
function
|
|
376
|
+
function T(e) {
|
|
377
377
|
if (Array.isArray(e)) return e;
|
|
378
378
|
}
|
|
379
379
|
/**
|
|
@@ -488,7 +488,7 @@
|
|
|
488
488
|
function X(e) {
|
|
489
489
|
return _(e, "0");
|
|
490
490
|
}
|
|
491
|
-
function
|
|
491
|
+
function L(e) {
|
|
492
492
|
var r = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0";
|
|
493
493
|
var n = _(e, r);
|
|
494
494
|
var t = r;
|
|
@@ -507,11 +507,11 @@
|
|
|
507
507
|
}
|
|
508
508
|
// continue to find its last child recursively
|
|
509
509
|
t = "".concat(t, "-0");
|
|
510
|
-
return
|
|
510
|
+
return L(e, t);
|
|
511
511
|
}
|
|
512
512
|
// CONCATENATED MODULE: ./src/Tree/Tree.tsx
|
|
513
|
-
function
|
|
514
|
-
return
|
|
513
|
+
function R() {
|
|
514
|
+
return R = Object.assign ? Object.assign.bind() : function(e) {
|
|
515
515
|
for (var r = 1; r < arguments.length; r++) {
|
|
516
516
|
var n = arguments[r];
|
|
517
517
|
for (var t in n) {
|
|
@@ -519,12 +519,12 @@
|
|
|
519
519
|
}
|
|
520
520
|
}
|
|
521
521
|
return e;
|
|
522
|
-
},
|
|
522
|
+
}, R.apply(null, arguments);
|
|
523
523
|
}
|
|
524
|
-
function
|
|
525
|
-
return Q(e) || J(e, r) || G(e, r) ||
|
|
524
|
+
function V(e, r) {
|
|
525
|
+
return Q(e) || J(e, r) || G(e, r) || z();
|
|
526
526
|
}
|
|
527
|
-
function
|
|
527
|
+
function z() {
|
|
528
528
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
529
529
|
}
|
|
530
530
|
function G(e, r) {
|
|
@@ -594,7 +594,7 @@
|
|
|
594
594
|
};
|
|
595
595
|
function ee(n) {
|
|
596
596
|
var t = n.children, o = n.defaultIndent, a = o === void 0 ? true : o, l = W(n, [ "children", "defaultIndent" ]);
|
|
597
|
-
var c = (0, e.useState)(), f =
|
|
597
|
+
var c = (0, e.useState)(), f = V(c, 2), d = f[0], v = f[1];
|
|
598
598
|
var s = new Map;
|
|
599
599
|
var y = function e(r, n, t, o, a) {
|
|
600
600
|
r.stopPropagation();
|
|
@@ -636,7 +636,7 @@
|
|
|
636
636
|
|
|
637
637
|
case "end":
|
|
638
638
|
r.preventDefault();
|
|
639
|
-
v(
|
|
639
|
+
v(L(s));
|
|
640
640
|
break;
|
|
641
641
|
|
|
642
642
|
case "enter":
|
|
@@ -678,13 +678,13 @@
|
|
|
678
678
|
|
|
679
679
|
return r().createElement(u.Provider, {
|
|
680
680
|
value: I
|
|
681
|
-
}, r().createElement(p,
|
|
681
|
+
}, r().createElement(p, R({
|
|
682
682
|
role: "tree",
|
|
683
683
|
$defaultIndent: a
|
|
684
684
|
}, l), t));
|
|
685
685
|
}
|
|
686
686
|
ee.propTypes = Z;
|
|
687
|
-
ee.
|
|
687
|
+
ee.Item = x;
|
|
688
688
|
/* harmony default export */ const re = ee;
|
|
689
689
|
}) // CONCATENATED MODULE: ./src/Tree/index.ts
|
|
690
690
|
();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@splunk/react-ui",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.46.0",
|
|
4
4
|
"description": "Library of React components that implement the Splunk design language",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Splunk Inc.",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@dnd-kit/sortable": "^8.0.0",
|
|
46
46
|
"@dnd-kit/utilities": "^3.2.2",
|
|
47
47
|
"@splunk/react-icons": "^4.14.0",
|
|
48
|
-
"@splunk/themes": "^0.
|
|
48
|
+
"@splunk/themes": "^0.25.0",
|
|
49
49
|
"@splunk/ui-utils": "^1.8.0",
|
|
50
50
|
"commonmark": "^0.30.0",
|
|
51
51
|
"commonmark-react-renderer": "^4.3.2",
|
package/types/src/Code/Code.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { ComponentProps } from '../utils/types';
|
|
4
|
-
type CodeSupportedLanguages = 'bash' | 'clike' | 'css' | 'html' | 'json' | 'javascript' | 'js' | 'jsx' | 'typescript' | 'ts' | 'tsx' | 'markup' | 'mathml' | 'plain' | 'plaintext' | 'splunk-spl' | 'svg' | 'text' | 'txt' | 'xml' | 'yaml' | 'yml';
|
|
4
|
+
type CodeSupportedLanguages = 'bash' | 'clike' | 'css' | 'html' | 'json' | 'javascript' | 'js' | 'jsx' | 'typescript' | 'ts' | 'tsx' | 'markup' | 'mathml' | 'plain' | 'plaintext' | 'splunk-spl' | 'sql' | 'svg' | 'text' | 'txt' | 'xml' | 'yaml' | 'yml';
|
|
5
5
|
interface CodePropsBase {
|
|
6
6
|
/**
|
|
7
7
|
* A React ref which is set to the DOM element when the component mounts and null when it unmounts.
|
|
@@ -71,6 +71,10 @@ interface HeadCellPropsBase {
|
|
|
71
71
|
* The `sortKey` is passed in the data object to the `onSort` callback, if provided.
|
|
72
72
|
*/
|
|
73
73
|
sortKey?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Content to show in a tooltip.
|
|
76
|
+
*/
|
|
77
|
+
tooltip?: React.ReactNode;
|
|
74
78
|
/**
|
|
75
79
|
* Truncate the text in the label. `truncate=false` is not compatible with `Table`'s
|
|
76
80
|
* `onRequestResize`.
|
|
@@ -12,6 +12,7 @@ interface HeadInnerPropsBase {
|
|
|
12
12
|
elementRef?: React.Ref<HTMLButtonElement | HTMLDivElement>;
|
|
13
13
|
focusWithin?: boolean;
|
|
14
14
|
hasActionsHead?: boolean;
|
|
15
|
+
hasTooltip?: boolean;
|
|
15
16
|
id?: string;
|
|
16
17
|
index?: number;
|
|
17
18
|
isMenu?: boolean;
|
|
@@ -27,7 +28,7 @@ interface HeadInnerPropsBase {
|
|
|
27
28
|
variant?: 'toggleAll' | 'info' | 'actions';
|
|
28
29
|
}
|
|
29
30
|
type HeadInnerProps = ComponentProps<HeadInnerPropsBase, 'span'>;
|
|
30
|
-
declare function HeadInner({ index, clickable, columnId, elementRef, focusWithin, id, width: widthProp, onDragEnd, onAutosizeColumn, align, label, hasActionsHead, isMenu, onDragStart, onRequestResize, resizable, sortDir, truncate, variant, ...otherProps }: HeadInnerProps): JSX.Element;
|
|
31
|
+
declare function HeadInner({ index, clickable, columnId, elementRef, focusWithin, id, width: widthProp, onDragEnd, onAutosizeColumn, align, label, hasActionsHead, hasTooltip, isMenu, onDragStart, onRequestResize, resizable, sortDir, truncate, variant, ...otherProps }: HeadInnerProps): JSX.Element;
|
|
31
32
|
declare namespace HeadInner {
|
|
32
33
|
var propTypes: {
|
|
33
34
|
align: PropTypes.Requireable<string>;
|
|
@@ -36,6 +37,7 @@ declare namespace HeadInner {
|
|
|
36
37
|
elementRef: PropTypes.Requireable<object>;
|
|
37
38
|
focusWithin: PropTypes.Requireable<boolean>;
|
|
38
39
|
hasActionsHead: PropTypes.Requireable<boolean>;
|
|
40
|
+
hasTooltip: PropTypes.Requireable<boolean>;
|
|
39
41
|
id: PropTypes.Requireable<string>;
|
|
40
42
|
index: PropTypes.Requireable<number>;
|
|
41
43
|
isMenu: PropTypes.Requireable<boolean>;
|
|
@@ -24,8 +24,8 @@ type TreeItemProps = ComponentProps<TreeItemPropsBase, 'li'>;
|
|
|
24
24
|
type TreeItemClickHandler = (event: React.MouseEvent<HTMLSpanElement>, id: string) => void;
|
|
25
25
|
type TreeItemKeyDownHandler = (event: React.KeyboardEvent<HTMLLIElement>, id: string, showChildren: boolean | undefined, childrenCleaned: React.ReactElement[] | undefined | null, handleToggle: TreeItemToggleHandler) => void;
|
|
26
26
|
type TreeItemToggleHandler = (isOpen: boolean, event?: React.KeyboardEvent<HTMLLIElement> | React.MouseEvent<HTMLSpanElement>) => void;
|
|
27
|
-
declare function
|
|
28
|
-
declare namespace
|
|
27
|
+
declare function Item({ id, children, content, customIndent, endAdornment, labelledBy, onFocus, onKeyDown, onToggle, open, toggle, ...otherProps }: TreeItemProps): JSX.Element;
|
|
28
|
+
declare namespace Item {
|
|
29
29
|
var propTypes: {
|
|
30
30
|
id: PropTypes.Requireable<string>;
|
|
31
31
|
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
@@ -40,5 +40,5 @@ declare namespace TreeItem {
|
|
|
40
40
|
toggle: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
export default
|
|
43
|
+
export default Item;
|
|
44
44
|
export { TreeItemClickHandler, TreeItemKeyDownHandler, TreeItemPropsBase, TreeItemToggleHandler };
|
package/types/src/Tree/Tree.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { ComponentProps } from '../utils/types';
|
|
4
|
-
import
|
|
4
|
+
import Item from './Item';
|
|
5
5
|
type RemoveNodeHandler = (id: string) => void;
|
|
6
6
|
type SetNodeHandler = (id: string, path?: string) => void;
|
|
7
7
|
interface TreePropsBase {
|
|
@@ -17,8 +17,7 @@ declare namespace Tree {
|
|
|
17
17
|
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
18
18
|
defaultIndent: PropTypes.Requireable<boolean>;
|
|
19
19
|
};
|
|
20
|
-
var
|
|
20
|
+
var Item: typeof import("./Item").default;
|
|
21
21
|
}
|
|
22
22
|
export default Tree;
|
|
23
|
-
export {
|
|
24
|
-
export { RemoveNodeHandler, SetNodeHandler };
|
|
23
|
+
export { RemoveNodeHandler, SetNodeHandler, Item };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { RemoveNodeHandler, SetNodeHandler } from './Tree';
|
|
3
|
-
import { TreeItemClickHandler, TreeItemKeyDownHandler } from './
|
|
3
|
+
import { TreeItemClickHandler, TreeItemKeyDownHandler } from './Item';
|
|
4
4
|
export interface TreeContext {
|
|
5
5
|
defaultIndent?: boolean;
|
|
6
6
|
onItemKeyDown?: TreeItemKeyDownHandler;
|