@douyinfe/semi-foundation 2.71.1 → 2.71.3
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/carousel/foundation.ts +4 -3
- package/image/image.scss +6 -0
- package/lib/cjs/carousel/foundation.d.ts +1 -0
- package/lib/cjs/carousel/foundation.js +2 -6
- package/lib/cjs/image/image.css +6 -0
- package/lib/cjs/image/image.scss +6 -0
- package/lib/cjs/tooltip/foundation.js +2 -1
- package/lib/cjs/tree/constants.d.ts +1 -0
- package/lib/cjs/tree/constants.js +2 -1
- package/lib/cjs/tree/foundation.js +2 -1
- package/lib/cjs/tree/treeUtil.js +2 -1
- package/lib/cjs/treeSelect/foundation.d.ts +1 -3
- package/lib/es/carousel/foundation.d.ts +1 -0
- package/lib/es/carousel/foundation.js +2 -6
- package/lib/es/image/image.css +6 -0
- package/lib/es/image/image.scss +6 -0
- package/lib/es/tooltip/foundation.js +2 -1
- package/lib/es/tree/constants.d.ts +1 -0
- package/lib/es/tree/constants.js +2 -1
- package/lib/es/tree/foundation.js +2 -1
- package/lib/es/tree/treeUtil.js +2 -1
- package/lib/es/treeSelect/foundation.d.ts +1 -3
- package/package.json +4 -4
- package/tooltip/foundation.ts +2 -1
- package/tree/constants.ts +1 -0
- package/tree/foundation.ts +2 -1
- package/tree/treeUtil.ts +2 -1
package/carousel/foundation.ts
CHANGED
|
@@ -7,7 +7,8 @@ export interface CarouselAdapter<P = Record<string, any>, S = Record<string, any
|
|
|
7
7
|
setNewActiveIndex: (activeIndex: number) => void;
|
|
8
8
|
setPreActiveIndex: (activeIndex: number) => void;
|
|
9
9
|
setIsReverse: (isReverse: boolean) => void;
|
|
10
|
-
setIsInit: (isInit: boolean) => void
|
|
10
|
+
setIsInit: (isInit: boolean) => void;
|
|
11
|
+
getChildren: () => any[]
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
class CarouselFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<CarouselAdapter<P, S>, P, S> {
|
|
@@ -102,7 +103,7 @@ class CarouselFoundation<P = Record<string, any>, S = Record<string, any>> exten
|
|
|
102
103
|
}
|
|
103
104
|
|
|
104
105
|
getValidIndex(index: number): number {
|
|
105
|
-
const
|
|
106
|
+
const children = this._adapter.getChildren();
|
|
106
107
|
return (index + children.length) % children.length;
|
|
107
108
|
}
|
|
108
109
|
|
|
@@ -124,7 +125,7 @@ class CarouselFoundation<P = Record<string, any>, S = Record<string, any>> exten
|
|
|
124
125
|
|
|
125
126
|
handleAutoPlay(): void {
|
|
126
127
|
const { autoPlay } = this.getProps();
|
|
127
|
-
const
|
|
128
|
+
const children = this._adapter.getChildren();
|
|
128
129
|
const autoPlayType = typeof autoPlay;
|
|
129
130
|
// when user manually call the play function, force play
|
|
130
131
|
// only when carousel children length > 1 to start play
|
package/image/image.scss
CHANGED
|
@@ -204,6 +204,12 @@ $module: #{$prefix}-image;
|
|
|
204
204
|
// transition: transform $transition_duration-image_preview_image_img $transition_delay-image_preview_image_img;
|
|
205
205
|
z-index: 0;
|
|
206
206
|
user-select: none;
|
|
207
|
+
/**
|
|
208
|
+
* In tailwind, the max-width of img/video is set to 100%,
|
|
209
|
+
* which will affect the amplification effect of the picture.
|
|
210
|
+
* So we need to set max-width to none.
|
|
211
|
+
*/
|
|
212
|
+
max-width: none;
|
|
207
213
|
}
|
|
208
214
|
|
|
209
215
|
&-spin {
|
|
@@ -5,6 +5,7 @@ export interface CarouselAdapter<P = Record<string, any>, S = Record<string, any
|
|
|
5
5
|
setPreActiveIndex: (activeIndex: number) => void;
|
|
6
6
|
setIsReverse: (isReverse: boolean) => void;
|
|
7
7
|
setIsInit: (isInit: boolean) => void;
|
|
8
|
+
getChildren: () => any[];
|
|
8
9
|
}
|
|
9
10
|
declare class CarouselFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<CarouselAdapter<P, S>, P, S> {
|
|
10
11
|
constructor(adapter: CarouselAdapter<P, S>);
|
|
@@ -97,9 +97,7 @@ class CarouselFoundation extends _foundation.default {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
getValidIndex(index) {
|
|
100
|
-
const
|
|
101
|
-
children
|
|
102
|
-
} = this.getStates();
|
|
100
|
+
const children = this._adapter.getChildren();
|
|
103
101
|
return (index + children.length) % children.length;
|
|
104
102
|
}
|
|
105
103
|
getSwitchingTime() {
|
|
@@ -123,9 +121,7 @@ class CarouselFoundation extends _foundation.default {
|
|
|
123
121
|
const {
|
|
124
122
|
autoPlay
|
|
125
123
|
} = this.getProps();
|
|
126
|
-
const
|
|
127
|
-
children
|
|
128
|
-
} = this.getStates();
|
|
124
|
+
const children = this._adapter.getChildren();
|
|
129
125
|
const autoPlayType = typeof autoPlay;
|
|
130
126
|
// when user manually call the play function, force play
|
|
131
127
|
// only when carousel children length > 1 to start play
|
package/lib/cjs/image/image.css
CHANGED
|
@@ -177,6 +177,12 @@
|
|
|
177
177
|
transform: scale3d(1, 1, 1) var(--semi-transform-rotate-none);
|
|
178
178
|
z-index: 0;
|
|
179
179
|
user-select: none;
|
|
180
|
+
/**
|
|
181
|
+
* In tailwind, the max-width of img/video is set to 100%,
|
|
182
|
+
* which will affect the amplification effect of the picture.
|
|
183
|
+
* So we need to set max-width to none.
|
|
184
|
+
*/
|
|
185
|
+
max-width: none;
|
|
180
186
|
}
|
|
181
187
|
.semi-image-preview-image-spin {
|
|
182
188
|
position: absolute;
|
package/lib/cjs/image/image.scss
CHANGED
|
@@ -204,6 +204,12 @@ $module: #{$prefix}-image;
|
|
|
204
204
|
// transition: transform $transition_duration-image_preview_image_img $transition_delay-image_preview_image_img;
|
|
205
205
|
z-index: 0;
|
|
206
206
|
user-select: none;
|
|
207
|
+
/**
|
|
208
|
+
* In tailwind, the max-width of img/video is set to 100%,
|
|
209
|
+
* which will affect the amplification effect of the picture.
|
|
210
|
+
* So we need to set max-width to none.
|
|
211
|
+
*/
|
|
212
|
+
max-width: none;
|
|
207
213
|
}
|
|
208
214
|
|
|
209
215
|
&-spin {
|
|
@@ -416,7 +416,8 @@ class Tooltip extends _foundation.default {
|
|
|
416
416
|
}
|
|
417
417
|
_togglePortalVisible(isVisible) {
|
|
418
418
|
const nowVisible = this.getState('visible');
|
|
419
|
-
|
|
419
|
+
const isInsert = this.getState("isInsert");
|
|
420
|
+
if (nowVisible !== isVisible || isInsert !== isVisible) {
|
|
420
421
|
this._adapter.togglePortalVisible(isVisible, () => {
|
|
421
422
|
if (isVisible) {
|
|
422
423
|
this._adapter.setInitialFocus();
|
|
@@ -10,6 +10,7 @@ const cssClasses = exports.cssClasses = {
|
|
|
10
10
|
PREFIX_OPTION: `${_constants.BASE_CLASS_PREFIX}-tree-option`
|
|
11
11
|
};
|
|
12
12
|
const strings = exports.strings = {
|
|
13
|
-
EXPAND_ACTION: [false, 'click', 'doubleClick']
|
|
13
|
+
EXPAND_ACTION: [false, 'click', 'doubleClick'],
|
|
14
|
+
JSON_KEY_SPLIT: '_SEMI_TREE_SPLIT_'
|
|
14
15
|
};
|
|
15
16
|
const numbers = exports.numbers = {};
|
|
@@ -10,6 +10,7 @@ var _difference2 = _interopRequireDefault(require("lodash/difference"));
|
|
|
10
10
|
var _isUndefined2 = _interopRequireDefault(require("lodash/isUndefined"));
|
|
11
11
|
var _foundation = _interopRequireDefault(require("../base/foundation"));
|
|
12
12
|
var _treeUtil = require("./treeUtil");
|
|
13
|
+
var _constants = require("./constants");
|
|
13
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
15
|
/**
|
|
15
16
|
* The drag and drop handler implementation is referenced from rc-tree
|
|
@@ -111,7 +112,7 @@ class TreeFoundation extends _foundation.default {
|
|
|
111
112
|
}
|
|
112
113
|
notifyJsonChange(key, e) {
|
|
113
114
|
const data = this.getProp('treeDataSimpleJson');
|
|
114
|
-
const selectedPath = (0, _treeUtil.normalizedArr)(key).map(i => i.
|
|
115
|
+
const selectedPath = (0, _treeUtil.normalizedArr)(key).map(i => i.replaceAll(_constants.strings.JSON_KEY_SPLIT, '.'));
|
|
115
116
|
const value = (0, _pick2.default)(data, selectedPath);
|
|
116
117
|
this._adapter.notifyChange(value);
|
|
117
118
|
}
|
package/lib/cjs/tree/treeUtil.js
CHANGED
|
@@ -41,6 +41,7 @@ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
|
|
|
41
41
|
var _max2 = _interopRequireDefault(require("lodash/max"));
|
|
42
42
|
var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
|
|
43
43
|
var _difference2 = _interopRequireDefault(require("lodash/difference"));
|
|
44
|
+
var _constants = require("./constants");
|
|
44
45
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
45
46
|
/**
|
|
46
47
|
* Part of the utils function implementation process reference
|
|
@@ -109,7 +110,7 @@ function convertJsonToData(treeJson) {
|
|
|
109
110
|
const treeData = [];
|
|
110
111
|
const traverseNode = (key, children, path, res) => {
|
|
111
112
|
const currPath = [...path, key];
|
|
112
|
-
const itemKey = currPath.join(
|
|
113
|
+
const itemKey = currPath.join(_constants.strings.JSON_KEY_SPLIT);
|
|
113
114
|
const newNode = {
|
|
114
115
|
key: itemKey,
|
|
115
116
|
label: key,
|
|
@@ -162,9 +162,7 @@ export default class TreeSelectFoundation<P = Record<string, any>, S = Record<st
|
|
|
162
162
|
handleSingleSelect(e: any, treeNode: BasicTreeNodeProps): void;
|
|
163
163
|
calcCheckedKeys(eventKey: BasicTreeNodeProps['eventKey'], targetStatus: boolean): {
|
|
164
164
|
checkedKeys: Set<string>;
|
|
165
|
-
halfCheckedKeys: Set<string>;
|
|
166
|
-
* A11y: simulate selection click
|
|
167
|
-
*/
|
|
165
|
+
halfCheckedKeys: Set<string>;
|
|
168
166
|
};
|
|
169
167
|
handleMultipleSelect(e: any, treeNode: BasicTreeNodeProps): void;
|
|
170
168
|
calcNonDisabledCheckedKeys(eventKey: string, targetStatus: boolean): {
|
|
@@ -5,6 +5,7 @@ export interface CarouselAdapter<P = Record<string, any>, S = Record<string, any
|
|
|
5
5
|
setPreActiveIndex: (activeIndex: number) => void;
|
|
6
6
|
setIsReverse: (isReverse: boolean) => void;
|
|
7
7
|
setIsInit: (isInit: boolean) => void;
|
|
8
|
+
getChildren: () => any[];
|
|
8
9
|
}
|
|
9
10
|
declare class CarouselFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<CarouselAdapter<P, S>, P, S> {
|
|
10
11
|
constructor(adapter: CarouselAdapter<P, S>);
|
|
@@ -90,9 +90,7 @@ class CarouselFoundation extends BaseFoundation {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
getValidIndex(index) {
|
|
93
|
-
const
|
|
94
|
-
children
|
|
95
|
-
} = this.getStates();
|
|
93
|
+
const children = this._adapter.getChildren();
|
|
96
94
|
return (index + children.length) % children.length;
|
|
97
95
|
}
|
|
98
96
|
getSwitchingTime() {
|
|
@@ -116,9 +114,7 @@ class CarouselFoundation extends BaseFoundation {
|
|
|
116
114
|
const {
|
|
117
115
|
autoPlay
|
|
118
116
|
} = this.getProps();
|
|
119
|
-
const
|
|
120
|
-
children
|
|
121
|
-
} = this.getStates();
|
|
117
|
+
const children = this._adapter.getChildren();
|
|
122
118
|
const autoPlayType = typeof autoPlay;
|
|
123
119
|
// when user manually call the play function, force play
|
|
124
120
|
// only when carousel children length > 1 to start play
|
package/lib/es/image/image.css
CHANGED
|
@@ -177,6 +177,12 @@
|
|
|
177
177
|
transform: scale3d(1, 1, 1) var(--semi-transform-rotate-none);
|
|
178
178
|
z-index: 0;
|
|
179
179
|
user-select: none;
|
|
180
|
+
/**
|
|
181
|
+
* In tailwind, the max-width of img/video is set to 100%,
|
|
182
|
+
* which will affect the amplification effect of the picture.
|
|
183
|
+
* So we need to set max-width to none.
|
|
184
|
+
*/
|
|
185
|
+
max-width: none;
|
|
180
186
|
}
|
|
181
187
|
.semi-image-preview-image-spin {
|
|
182
188
|
position: absolute;
|
package/lib/es/image/image.scss
CHANGED
|
@@ -204,6 +204,12 @@ $module: #{$prefix}-image;
|
|
|
204
204
|
// transition: transform $transition_duration-image_preview_image_img $transition_delay-image_preview_image_img;
|
|
205
205
|
z-index: 0;
|
|
206
206
|
user-select: none;
|
|
207
|
+
/**
|
|
208
|
+
* In tailwind, the max-width of img/video is set to 100%,
|
|
209
|
+
* which will affect the amplification effect of the picture.
|
|
210
|
+
* So we need to set max-width to none.
|
|
211
|
+
*/
|
|
212
|
+
max-width: none;
|
|
207
213
|
}
|
|
208
214
|
|
|
209
215
|
&-spin {
|
|
@@ -409,7 +409,8 @@ export default class Tooltip extends BaseFoundation {
|
|
|
409
409
|
}
|
|
410
410
|
_togglePortalVisible(isVisible) {
|
|
411
411
|
const nowVisible = this.getState('visible');
|
|
412
|
-
|
|
412
|
+
const isInsert = this.getState("isInsert");
|
|
413
|
+
if (nowVisible !== isVisible || isInsert !== isVisible) {
|
|
413
414
|
this._adapter.togglePortalVisible(isVisible, () => {
|
|
414
415
|
if (isVisible) {
|
|
415
416
|
this._adapter.setInitialFocus();
|
package/lib/es/tree/constants.js
CHANGED
|
@@ -4,7 +4,8 @@ const cssClasses = {
|
|
|
4
4
|
PREFIX_OPTION: `${BASE_CLASS_PREFIX}-tree-option`
|
|
5
5
|
};
|
|
6
6
|
const strings = {
|
|
7
|
-
EXPAND_ACTION: [false, 'click', 'doubleClick']
|
|
7
|
+
EXPAND_ACTION: [false, 'click', 'doubleClick'],
|
|
8
|
+
JSON_KEY_SPLIT: '_SEMI_TREE_SPLIT_'
|
|
8
9
|
};
|
|
9
10
|
const numbers = {};
|
|
10
11
|
export { cssClasses, strings, numbers };
|
|
@@ -8,6 +8,7 @@ import _isUndefined from "lodash/isUndefined";
|
|
|
8
8
|
*/
|
|
9
9
|
import BaseFoundation from '../base/foundation';
|
|
10
10
|
import { flattenTreeData, findDescendantKeys, findAncestorKeys, filter, normalizedArr, normalizeKeyList, getMotionKeys, calcCheckedKeysForChecked, calcCheckedKeysForUnchecked, calcCheckedKeys, getValueOrKey, getDragNodesKeys, calcDropRelativePosition, calcDropActualPosition } from './treeUtil';
|
|
11
|
+
import { strings } from './constants';
|
|
11
12
|
export default class TreeFoundation extends BaseFoundation {
|
|
12
13
|
constructor(adapter) {
|
|
13
14
|
super(Object.assign({}, adapter));
|
|
@@ -103,7 +104,7 @@ export default class TreeFoundation extends BaseFoundation {
|
|
|
103
104
|
}
|
|
104
105
|
notifyJsonChange(key, e) {
|
|
105
106
|
const data = this.getProp('treeDataSimpleJson');
|
|
106
|
-
const selectedPath = normalizedArr(key).map(i => i.
|
|
107
|
+
const selectedPath = normalizedArr(key).map(i => i.replaceAll(strings.JSON_KEY_SPLIT, '.'));
|
|
107
108
|
const value = _pick(data, selectedPath);
|
|
108
109
|
this._adapter.notifyChange(value);
|
|
109
110
|
}
|
package/lib/es/tree/treeUtil.js
CHANGED
|
@@ -12,6 +12,7 @@ import _difference from "lodash/difference";
|
|
|
12
12
|
* Part of the utils function implementation process reference
|
|
13
13
|
* https://github.com/react-component/tree/blob/master/src/util.tsx
|
|
14
14
|
*/
|
|
15
|
+
import { strings } from './constants';
|
|
15
16
|
const DRAG_OFFSET = 0.45;
|
|
16
17
|
function getPosition(level, index) {
|
|
17
18
|
return `${level}-${index}`;
|
|
@@ -74,7 +75,7 @@ export function convertJsonToData(treeJson) {
|
|
|
74
75
|
const treeData = [];
|
|
75
76
|
const traverseNode = (key, children, path, res) => {
|
|
76
77
|
const currPath = [...path, key];
|
|
77
|
-
const itemKey = currPath.join(
|
|
78
|
+
const itemKey = currPath.join(strings.JSON_KEY_SPLIT);
|
|
78
79
|
const newNode = {
|
|
79
80
|
key: itemKey,
|
|
80
81
|
label: key,
|
|
@@ -162,9 +162,7 @@ export default class TreeSelectFoundation<P = Record<string, any>, S = Record<st
|
|
|
162
162
|
handleSingleSelect(e: any, treeNode: BasicTreeNodeProps): void;
|
|
163
163
|
calcCheckedKeys(eventKey: BasicTreeNodeProps['eventKey'], targetStatus: boolean): {
|
|
164
164
|
checkedKeys: Set<string>;
|
|
165
|
-
halfCheckedKeys: Set<string>;
|
|
166
|
-
* A11y: simulate selection click
|
|
167
|
-
*/
|
|
165
|
+
halfCheckedKeys: Set<string>;
|
|
168
166
|
};
|
|
169
167
|
handleMultipleSelect(e: any, treeNode: BasicTreeNodeProps): void;
|
|
170
168
|
calcNonDisabledCheckedKeys(eventKey: string, targetStatus: boolean): {
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@douyinfe/semi-foundation",
|
|
3
|
-
"version": "2.71.
|
|
3
|
+
"version": "2.71.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build:lib": "node ./scripts/compileLib.js",
|
|
7
7
|
"prepublishOnly": "npm run build:lib"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@douyinfe/semi-animation": "2.71.
|
|
11
|
-
"@douyinfe/semi-json-viewer-core": "2.71.
|
|
10
|
+
"@douyinfe/semi-animation": "2.71.3",
|
|
11
|
+
"@douyinfe/semi-json-viewer-core": "2.71.3",
|
|
12
12
|
"@mdx-js/mdx": "^3.0.1",
|
|
13
13
|
"async-validator": "^3.5.0",
|
|
14
14
|
"classnames": "^2.2.6",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"*.scss",
|
|
30
30
|
"*.css"
|
|
31
31
|
],
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "2c3f3a4e4e1dee2fe1a55586edc11d6dc3a6bd93",
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@babel/plugin-transform-runtime": "^7.15.8",
|
|
35
35
|
"@babel/preset-env": "^7.15.8",
|
package/tooltip/foundation.ts
CHANGED
|
@@ -383,7 +383,8 @@ export default class Tooltip<P = Record<string, any>, S = Record<string, any>> e
|
|
|
383
383
|
|
|
384
384
|
_togglePortalVisible(isVisible: boolean) {
|
|
385
385
|
const nowVisible = this.getState('visible');
|
|
386
|
-
|
|
386
|
+
const isInsert = this.getState("isInsert");
|
|
387
|
+
if (nowVisible !== isVisible || isInsert !== isVisible) {
|
|
387
388
|
this._adapter.togglePortalVisible(isVisible, () => {
|
|
388
389
|
if (isVisible) {
|
|
389
390
|
this._adapter.setInitialFocus();
|
package/tree/constants.ts
CHANGED
package/tree/foundation.ts
CHANGED
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
} from './treeUtil';
|
|
24
24
|
|
|
25
25
|
import type { KeyMapProps } from './treeUtil';
|
|
26
|
+
import { strings } from './constants';
|
|
26
27
|
export type { KeyMapProps };
|
|
27
28
|
|
|
28
29
|
export interface BasicTreeNodeProps {
|
|
@@ -415,7 +416,7 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
415
416
|
|
|
416
417
|
notifyJsonChange(key: string[] | string, e: any) {
|
|
417
418
|
const data = this.getProp('treeDataSimpleJson');
|
|
418
|
-
const selectedPath = normalizedArr(key).map(i => i.
|
|
419
|
+
const selectedPath = normalizedArr(key).map(i => i.replaceAll(strings.JSON_KEY_SPLIT, '.'));
|
|
419
420
|
const value = pick(data, selectedPath);
|
|
420
421
|
this._adapter.notifyChange(value as BasicValue);
|
|
421
422
|
}
|
package/tree/treeUtil.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { difference, uniq, max, isObject, isNull, isUndefined, isEmpty, pick, get, omit } from 'lodash';
|
|
7
|
+
import { strings } from './constants';
|
|
7
8
|
|
|
8
9
|
export interface KeyEntities {
|
|
9
10
|
[x: string]: any
|
|
@@ -98,7 +99,7 @@ export function convertJsonToData(treeJson: TreeDataSimpleJson) {
|
|
|
98
99
|
const treeData: any[] = [];
|
|
99
100
|
const traverseNode = (key: string, children: any, path: any, res: any[]) => {
|
|
100
101
|
const currPath = [...path, key];
|
|
101
|
-
const itemKey = currPath.join(
|
|
102
|
+
const itemKey = currPath.join(strings.JSON_KEY_SPLIT);
|
|
102
103
|
|
|
103
104
|
const newNode: NodeData = {
|
|
104
105
|
key: itemKey,
|