@opensumi/ide-components 2.16.7 → 2.16.8
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/dist/index.js +171 -59
- package/lib/icon/iconfont/iconManager.d.ts +13 -1
- package/lib/icon/iconfont/iconManager.d.ts.map +1 -1
- package/lib/icon/iconfont/iconManager.js +4 -0
- package/lib/icon/iconfont/iconManager.js.map +1 -1
- package/lib/icon/iconfont/iconMap.d.ts +13 -1
- package/lib/icon/iconfont/iconMap.d.ts.map +1 -1
- package/lib/icon/iconfont/iconMap.js +13 -1
- package/lib/icon/iconfont/iconMap.js.map +1 -1
- package/lib/icon/iconfont/iconfont.css +50 -6
- package/lib/icon/iconfont/iconfont.eot +0 -0
- package/lib/icon/iconfont/iconfont.html +341 -741
- package/lib/icon/iconfont/iconfont.svg +22 -0
- package/lib/icon/iconfont/iconfont.ttf +0 -0
- package/lib/icon/iconfont/iconfont.woff +0 -0
- package/lib/icon/iconfont/iconfont.woff2 +0 -0
- package/lib/menu/MenuItem.d.ts +6 -7
- package/lib/menu/MenuItem.d.ts.map +1 -1
- package/lib/menu/MenuItem.js +2 -8
- package/lib/menu/MenuItem.js.map +1 -1
- package/lib/menu/SubMenu.d.ts +4 -5
- package/lib/menu/SubMenu.d.ts.map +1 -1
- package/lib/menu/SubMenu.js +1 -10
- package/lib/menu/SubMenu.js.map +1 -1
- package/lib/menu/index.d.ts +4 -4
- package/lib/menu/index.d.ts.map +1 -1
- package/lib/menu/index.js +1 -1
- package/lib/menu/index.js.map +1 -1
- package/lib/menu/style.less +2 -1
- package/lib/notification/index.d.ts +1 -1
- package/lib/notification/index.d.ts.map +1 -1
- package/lib/notification/index.js.map +1 -1
- package/lib/recycle-tree/RecycleTree.d.ts +4 -2
- package/lib/recycle-tree/RecycleTree.d.ts.map +1 -1
- package/lib/recycle-tree/RecycleTree.js +50 -13
- package/lib/recycle-tree/RecycleTree.js.map +1 -1
- package/lib/recycle-tree/tree/TreeNode.d.ts +15 -4
- package/lib/recycle-tree/tree/TreeNode.d.ts.map +1 -1
- package/lib/recycle-tree/tree/TreeNode.js +91 -34
- package/lib/recycle-tree/tree/TreeNode.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -4163,7 +4163,7 @@ tslib_1.__exportStar(__webpack_require__(294), exports);
|
|
|
4163
4163
|
"use strict";
|
|
4164
4164
|
|
|
4165
4165
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4166
|
-
exports.CompositeTreeNode = exports.TreeNode = exports.spliceArray = void 0;
|
|
4166
|
+
exports.CompositeTreeNode = exports.TreeNode = exports.BranchOperatorStatus = exports.spliceArray = void 0;
|
|
4167
4167
|
const tslib_1 = __webpack_require__(2);
|
|
4168
4168
|
const utils_1 = __webpack_require__(14);
|
|
4169
4169
|
const types_1 = __webpack_require__(22);
|
|
@@ -4181,6 +4181,11 @@ function spliceArray(arr, start, deleteCount = 0, items) {
|
|
|
4181
4181
|
return a;
|
|
4182
4182
|
}
|
|
4183
4183
|
exports.spliceArray = spliceArray;
|
|
4184
|
+
var BranchOperatorStatus;
|
|
4185
|
+
(function (BranchOperatorStatus) {
|
|
4186
|
+
BranchOperatorStatus[BranchOperatorStatus["EXPANDED"] = 1] = "EXPANDED";
|
|
4187
|
+
BranchOperatorStatus[BranchOperatorStatus["SHRINKED"] = 2] = "SHRINKED";
|
|
4188
|
+
})(BranchOperatorStatus = exports.BranchOperatorStatus || (exports.BranchOperatorStatus = {}));
|
|
4184
4189
|
class TreeNode {
|
|
4185
4190
|
constructor(tree, parent, watcher, optionalMetadata, options) {
|
|
4186
4191
|
this._uid = TreeNode.nextId();
|
|
@@ -4199,6 +4204,10 @@ class TreeNode {
|
|
|
4199
4204
|
if (!(options && options.disableCache)) {
|
|
4200
4205
|
TreeNode.setTreeNode(this._uid, this.path, this);
|
|
4201
4206
|
}
|
|
4207
|
+
if (!parent) {
|
|
4208
|
+
// 由于根节点默认展开,故默认状态应该为 BranchOperatorStatus.EXPANDED
|
|
4209
|
+
TreeNode.updateBranchStatus(this.path, BranchOperatorStatus.EXPANDED);
|
|
4210
|
+
}
|
|
4202
4211
|
}
|
|
4203
4212
|
static is(node) {
|
|
4204
4213
|
return !!node && 'depth' in node && 'name' in node && 'path' in node && 'id' in node;
|
|
@@ -4217,6 +4226,12 @@ class TreeNode {
|
|
|
4217
4226
|
TreeNode.idToTreeNode.delete(id);
|
|
4218
4227
|
TreeNode.pathToTreeNode.delete(path);
|
|
4219
4228
|
}
|
|
4229
|
+
static updateBranchStatus(path, status) {
|
|
4230
|
+
TreeNode.pathToBranchStatus.set(path, status);
|
|
4231
|
+
}
|
|
4232
|
+
static getBranchStatus(path) {
|
|
4233
|
+
return TreeNode.pathToBranchStatus.get(path);
|
|
4234
|
+
}
|
|
4220
4235
|
get disposed() {
|
|
4221
4236
|
return this._disposed;
|
|
4222
4237
|
}
|
|
@@ -4357,6 +4372,7 @@ TreeNode.nextId = (() => {
|
|
|
4357
4372
|
})();
|
|
4358
4373
|
TreeNode.idToTreeNode = new Map();
|
|
4359
4374
|
TreeNode.pathToTreeNode = new Map();
|
|
4375
|
+
TreeNode.pathToBranchStatus = new Map();
|
|
4360
4376
|
class CompositeTreeNode extends TreeNode {
|
|
4361
4377
|
// parent 为undefined即表示该节点为根节点
|
|
4362
4378
|
constructor(tree, parent, watcher, optionalMetadata, options) {
|
|
@@ -4603,10 +4619,10 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4603
4619
|
this.isExpanded = true;
|
|
4604
4620
|
if (this._children === null) {
|
|
4605
4621
|
!quiet && this._watcher.notifyWillResolveChildren(this, this.isExpanded);
|
|
4606
|
-
yield this.hardReloadChildren();
|
|
4622
|
+
const resolved = yield this.hardReloadChildren();
|
|
4607
4623
|
!quiet && this._watcher.notifyDidResolveChildren(this, this.isExpanded);
|
|
4608
4624
|
// 检查其是否展开;可能同时执行了 setCollapsed 方法
|
|
4609
|
-
if (!this.isExpanded) {
|
|
4625
|
+
if (!this.isExpanded || !resolved) {
|
|
4610
4626
|
return;
|
|
4611
4627
|
}
|
|
4612
4628
|
}
|
|
@@ -4664,7 +4680,21 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4664
4680
|
let forceLoadPath;
|
|
4665
4681
|
if (this.isExpanded) {
|
|
4666
4682
|
if (needReload) {
|
|
4667
|
-
yield this.hardReloadChildren(true);
|
|
4683
|
+
const resolved = yield this.hardReloadChildren(true);
|
|
4684
|
+
if (!resolved) {
|
|
4685
|
+
// 当请求刷新节点时,如果该节点已经不应该被处理,则清理 Children
|
|
4686
|
+
// 下次再被展开时便会自动更新 Children 最新内容
|
|
4687
|
+
if (this.children) {
|
|
4688
|
+
// 清理子节点,等待下次展开时更新
|
|
4689
|
+
if (!!this.children && this.parent) {
|
|
4690
|
+
for (const child of this.children) {
|
|
4691
|
+
child.dispose();
|
|
4692
|
+
}
|
|
4693
|
+
this._children = null;
|
|
4694
|
+
}
|
|
4695
|
+
}
|
|
4696
|
+
return;
|
|
4697
|
+
}
|
|
4668
4698
|
}
|
|
4669
4699
|
while ((forceLoadPath = expandedPaths.shift())) {
|
|
4670
4700
|
const relativePath = new utils_1.Path(this.path).relative(new utils_1.Path(forceLoadPath));
|
|
@@ -4680,9 +4710,9 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4680
4710
|
if (forceLoadPath.indexOf(child.path) === 0 && CompositeTreeNode.is(child)) {
|
|
4681
4711
|
// 包含压缩节点的情况
|
|
4682
4712
|
// 加载路径包含当前判断路径,尝试加载该节点再匹配
|
|
4683
|
-
yield child.hardReloadChildren(true);
|
|
4684
|
-
if (child.isExpanded) {
|
|
4685
|
-
//
|
|
4713
|
+
const resolved = yield child.hardReloadChildren(true);
|
|
4714
|
+
if (child.isExpanded || !resolved) {
|
|
4715
|
+
// 说明此时节点初始化时已默认展开或被裁切,不需要进一步处理
|
|
4686
4716
|
continue;
|
|
4687
4717
|
}
|
|
4688
4718
|
child.isExpanded = true;
|
|
@@ -4710,8 +4740,12 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4710
4740
|
yield child.forceReloadChildrenQuiet(expandedPaths);
|
|
4711
4741
|
}
|
|
4712
4742
|
else {
|
|
4713
|
-
yield child.hardReloadChildren(true);
|
|
4714
|
-
|
|
4743
|
+
const resolved = yield child.hardReloadChildren(true);
|
|
4744
|
+
if (resolved) {
|
|
4745
|
+
// 这里有可能因为加载节点内容后由于节点已裁切到本身节点上,导致二次裁切问题
|
|
4746
|
+
// 当节点裁切后不再二次裁切,同时也不额外执行展开节点的操作
|
|
4747
|
+
child.expandBranch(child, true);
|
|
4748
|
+
}
|
|
4715
4749
|
}
|
|
4716
4750
|
}
|
|
4717
4751
|
}
|
|
@@ -4720,6 +4754,7 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4720
4754
|
this.expandBranch(this, true);
|
|
4721
4755
|
}
|
|
4722
4756
|
else if (CompositeTreeNode.isRoot(this)) {
|
|
4757
|
+
TreeNode.updateBranchStatus(this.path, BranchOperatorStatus.EXPANDED);
|
|
4723
4758
|
// 通知分支树已更新
|
|
4724
4759
|
this.watcher.notifyDidUpdateBranch();
|
|
4725
4760
|
}
|
|
@@ -4783,20 +4818,22 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4783
4818
|
}
|
|
4784
4819
|
// 折叠节点
|
|
4785
4820
|
setCollapsed(quiet = false) {
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4821
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
4822
|
+
// 根节点不可折叠
|
|
4823
|
+
if (CompositeTreeNode.isRoot(this)) {
|
|
4824
|
+
return;
|
|
4825
|
+
}
|
|
4826
|
+
if (!this.isExpanded) {
|
|
4827
|
+
return;
|
|
4828
|
+
}
|
|
4794
4829
|
!quiet && this._watcher.notifyWillChangeExpansionState(this, false);
|
|
4795
|
-
|
|
4796
|
-
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4830
|
+
if (this._children && this.parent) {
|
|
4831
|
+
// 从根节点裁剪分支
|
|
4832
|
+
this.shrinkBranch(this, quiet);
|
|
4833
|
+
}
|
|
4834
|
+
this.isExpanded = false;
|
|
4835
|
+
!quiet && this._watcher.notifyDidChangeExpansionState(this, false);
|
|
4836
|
+
});
|
|
4800
4837
|
}
|
|
4801
4838
|
mv(to, name = this.name) {
|
|
4802
4839
|
const prevPath = this.path;
|
|
@@ -4966,22 +5003,22 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4966
5003
|
* 设置扁平化的分支信息
|
|
4967
5004
|
*/
|
|
4968
5005
|
setFlattenedBranch(leaves, withoutNotify) {
|
|
4969
|
-
this._lock = true;
|
|
4970
5006
|
this._flattenedBranch = leaves;
|
|
4971
5007
|
// Root节点才通知更新
|
|
4972
5008
|
if (CompositeTreeNode.isRoot(this) && !withoutNotify) {
|
|
4973
5009
|
this.watcher.notifyDidUpdateBranch();
|
|
4974
5010
|
}
|
|
4975
|
-
this._lock = false;
|
|
4976
5011
|
}
|
|
4977
5012
|
/**
|
|
4978
5013
|
* 展开分支节点
|
|
4979
5014
|
* @param branch 分支节点
|
|
4980
5015
|
*/
|
|
4981
5016
|
expandBranch(branch, withoutNotify) {
|
|
4982
|
-
if (this !== branch) {
|
|
5017
|
+
if (this !== branch && !this.lock) {
|
|
4983
5018
|
// 但节点为展开状态时进行裁剪
|
|
4984
|
-
|
|
5019
|
+
if (branch._flattenedBranch) {
|
|
5020
|
+
this._branchSize += branch._branchSize;
|
|
5021
|
+
}
|
|
4985
5022
|
}
|
|
4986
5023
|
// 当前节点为折叠状态,更新分支信息
|
|
4987
5024
|
if (this !== branch && this._flattenedBranch) {
|
|
@@ -4998,20 +5035,19 @@ class CompositeTreeNode extends TreeNode {
|
|
|
4998
5035
|
this.setFlattenedBranch(spliceArray(this._flattenedBranch, injectionStartIdx, 0, branch._flattenedBranch), withoutNotify);
|
|
4999
5036
|
}
|
|
5000
5037
|
// 取消展开分支对于分支的所有权,即最终只会有顶部Root拥有所有分支信息
|
|
5001
|
-
|
|
5002
|
-
branch.setFlattenedBranch(null, withoutNotify);
|
|
5003
|
-
}
|
|
5038
|
+
branch.setFlattenedBranch(null, withoutNotify);
|
|
5004
5039
|
}
|
|
5005
5040
|
else if (this.parent) {
|
|
5006
5041
|
this.parent.expandBranch(branch, withoutNotify);
|
|
5007
5042
|
}
|
|
5043
|
+
TreeNode.updateBranchStatus(branch.path, BranchOperatorStatus.EXPANDED);
|
|
5008
5044
|
}
|
|
5009
5045
|
/**
|
|
5010
5046
|
* 清理分支节点
|
|
5011
5047
|
* @param branch 分支节点
|
|
5012
5048
|
*/
|
|
5013
5049
|
shrinkBranch(branch, withoutNotify) {
|
|
5014
|
-
if (this !== branch) {
|
|
5050
|
+
if (this !== branch && !this.lock) {
|
|
5015
5051
|
// 这里的`this`实际上为父节点
|
|
5016
5052
|
// `this`的分支大小没有改变,仍然具有相同数量的叶子,但是从父级参照系(即根节点)来看,其分支缩小了
|
|
5017
5053
|
this._branchSize -= branch._branchSize;
|
|
@@ -5022,20 +5058,21 @@ class CompositeTreeNode extends TreeNode {
|
|
|
5022
5058
|
// 中途发生了branch更新事件,此时的_flattenedBranch可能已被更新,即查找不到branch.id
|
|
5023
5059
|
return;
|
|
5024
5060
|
}
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
}
|
|
5029
|
-
if (!this.lock) {
|
|
5030
|
-
this.setFlattenedBranch(spliceArray(this._flattenedBranch, removalStartIdx, branch._flattenedBranch ? branch._flattenedBranch.length : 0), withoutNotify);
|
|
5031
|
-
}
|
|
5061
|
+
// 返回分支对于分支信息所有权,即将折叠的节点信息再次存储于折叠了的节点中
|
|
5062
|
+
branch.setFlattenedBranch(this._flattenedBranch.slice(removalStartIdx, removalStartIdx + branch._branchSize), withoutNotify);
|
|
5063
|
+
this.setFlattenedBranch(spliceArray(this._flattenedBranch, removalStartIdx, branch._flattenedBranch ? branch._flattenedBranch.length : 0), withoutNotify);
|
|
5032
5064
|
}
|
|
5033
5065
|
else if (this.parent) {
|
|
5034
5066
|
this.parent.shrinkBranch(branch, withoutNotify);
|
|
5035
5067
|
}
|
|
5068
|
+
TreeNode.updateBranchStatus(branch.path, BranchOperatorStatus.SHRINKED);
|
|
5036
5069
|
}
|
|
5037
5070
|
/**
|
|
5038
5071
|
* 加载节点信息
|
|
5072
|
+
* 当返回值为 true 时,一般应该被逻辑响应,即需要进行 expandBranch 的操作更新视图
|
|
5073
|
+
* 返回值为 false 时,此时后续的 expandBranch 不应该被响应,否则可能出现节点重复展示问题
|
|
5074
|
+
* 该问题一般容易在调用 refresh 时并在某个时间点点击节点展开的情况下
|
|
5075
|
+
*
|
|
5039
5076
|
* @memberof CompositeTreeNode
|
|
5040
5077
|
*/
|
|
5041
5078
|
hardReloadChildren(quiet) {
|
|
@@ -5043,10 +5080,10 @@ class CompositeTreeNode extends TreeNode {
|
|
|
5043
5080
|
if (this.hardReloadPromise) {
|
|
5044
5081
|
return this.hardReloadPromise;
|
|
5045
5082
|
}
|
|
5046
|
-
this.hardReloadPromise = new Promise((res) => (this.
|
|
5083
|
+
this.hardReloadPromise = new Promise((res) => (this.hardReloadResolver = res));
|
|
5047
5084
|
this.hardReloadPromise.then(() => {
|
|
5048
5085
|
this.hardReloadPromise = null;
|
|
5049
|
-
this.
|
|
5086
|
+
this.hardReloadResolver = null;
|
|
5050
5087
|
});
|
|
5051
5088
|
let rawItems;
|
|
5052
5089
|
try {
|
|
@@ -5055,10 +5092,28 @@ class CompositeTreeNode extends TreeNode {
|
|
|
5055
5092
|
catch (e) {
|
|
5056
5093
|
rawItems = [];
|
|
5057
5094
|
}
|
|
5058
|
-
|
|
5095
|
+
// 当获取到新的子节点时,如果当前节点正处于非展开状态时,忽略后续裁切逻辑
|
|
5096
|
+
// 后续的 expandBranch 也不应该被响应
|
|
5097
|
+
if (!this.isExpanded) {
|
|
5098
|
+
if (this.hardReloadResolver) {
|
|
5099
|
+
this.hardReloadResolver(false);
|
|
5100
|
+
return false;
|
|
5101
|
+
}
|
|
5102
|
+
}
|
|
5103
|
+
if (this.children) {
|
|
5059
5104
|
// 重置节点分支
|
|
5060
5105
|
this.shrinkBranch(this, quiet);
|
|
5061
5106
|
}
|
|
5107
|
+
else {
|
|
5108
|
+
const status = TreeNode.getBranchStatus(this.path);
|
|
5109
|
+
if (status === BranchOperatorStatus.EXPANDED) {
|
|
5110
|
+
// 当节点 flattenedBranch 已被处理过,同时此时接受到更新指令时,依旧需要进行裁切操作
|
|
5111
|
+
// 便于在视图上更新子节点变化
|
|
5112
|
+
if (!this.flattenedBranch && this.branchSize) {
|
|
5113
|
+
this.shrinkBranch(this, quiet);
|
|
5114
|
+
}
|
|
5115
|
+
}
|
|
5116
|
+
}
|
|
5062
5117
|
const flatTree = new Array(rawItems.length);
|
|
5063
5118
|
this._children = Array(rawItems.length);
|
|
5064
5119
|
for (let i = 0; i < rawItems.length; i++) {
|
|
@@ -5076,8 +5131,9 @@ class CompositeTreeNode extends TreeNode {
|
|
|
5076
5131
|
this.watchTerminator(this.path);
|
|
5077
5132
|
}
|
|
5078
5133
|
this.watchTerminator = this.watcher.onWatchEvent(this.path, this.handleWatchEvent);
|
|
5079
|
-
if (this.
|
|
5080
|
-
this.
|
|
5134
|
+
if (this.hardReloadResolver) {
|
|
5135
|
+
this.hardReloadResolver(true);
|
|
5136
|
+
return true;
|
|
5081
5137
|
}
|
|
5082
5138
|
});
|
|
5083
5139
|
}
|
|
@@ -5100,16 +5156,19 @@ class CompositeTreeNode extends TreeNode {
|
|
|
5100
5156
|
return result;
|
|
5101
5157
|
};
|
|
5102
5158
|
this.queuedRefreshPromise = new Promise((resolve) => {
|
|
5103
|
-
|
|
5159
|
+
var _a;
|
|
5160
|
+
(_a = this.activeRefreshPromise) === null || _a === void 0 ? void 0 : _a.then(onComplete, onComplete).then(resolve);
|
|
5104
5161
|
});
|
|
5105
5162
|
}
|
|
5106
5163
|
return new Promise((c, e) => {
|
|
5107
|
-
|
|
5164
|
+
var _a;
|
|
5165
|
+
(_a = this.queuedRefreshPromise) === null || _a === void 0 ? void 0 : _a.then(c, e);
|
|
5108
5166
|
});
|
|
5109
5167
|
}
|
|
5110
5168
|
this.activeRefreshPromise = promiseFactory();
|
|
5111
5169
|
return new Promise((c, e) => {
|
|
5112
|
-
|
|
5170
|
+
var _a;
|
|
5171
|
+
(_a = this.activeRefreshPromise) === null || _a === void 0 ? void 0 : _a.then((result) => {
|
|
5113
5172
|
this.activeRefreshPromise = null;
|
|
5114
5173
|
c(result);
|
|
5115
5174
|
}, (err) => {
|
|
@@ -7393,6 +7452,10 @@ class IconManager {
|
|
|
7393
7452
|
this._ktIconPrefixes.push(prefix);
|
|
7394
7453
|
}
|
|
7395
7454
|
getIconClx(iconKey) {
|
|
7455
|
+
if (!iconKey) {
|
|
7456
|
+
(0, warning_1.default)(false, 'not a valid icon key:' + iconKey);
|
|
7457
|
+
return [];
|
|
7458
|
+
}
|
|
7396
7459
|
let lastIndex = this._ktIconPrefixes.length;
|
|
7397
7460
|
while (!this._iconMap[this._ktIconPrefixes[--lastIndex]][iconKey]) {
|
|
7398
7461
|
if (lastIndex === 0) {
|
|
@@ -7590,10 +7653,12 @@ class RecycleTree extends react_1.default.Component {
|
|
|
7590
7653
|
this.filterFlattenBranchChildrenCache = new Map();
|
|
7591
7654
|
this.filterWatcherDisposeCollection = new utils_1.DisposableCollection();
|
|
7592
7655
|
this.batchUpdatePromise = null;
|
|
7656
|
+
this.delayedUpdatePromise = null;
|
|
7657
|
+
this.batchUpdateQueue = 0;
|
|
7593
7658
|
// 批量更新Tree节点
|
|
7594
7659
|
this.batchUpdate = (() => {
|
|
7595
7660
|
let lastFrame;
|
|
7596
|
-
const commitUpdate = () => {
|
|
7661
|
+
const commitUpdate = (resolver) => {
|
|
7597
7662
|
// 已经在 componentWillUnMount 中 disposed 了
|
|
7598
7663
|
if (this.disposables.disposed) {
|
|
7599
7664
|
return;
|
|
@@ -7637,7 +7702,7 @@ class RecycleTree extends react_1.default.Component {
|
|
|
7637
7702
|
this.idxToRendererPropsCache.clear();
|
|
7638
7703
|
// 更新React组件
|
|
7639
7704
|
this.forceUpdate(() => {
|
|
7640
|
-
|
|
7705
|
+
resolver();
|
|
7641
7706
|
// 如果存在过滤条件,同时筛选一下展示节点
|
|
7642
7707
|
if (this.props.filter && this.props.filterProvider && this.props.filterProvider.filterAlways) {
|
|
7643
7708
|
this.filterItems(this.props.filter);
|
|
@@ -7645,21 +7710,50 @@ class RecycleTree extends react_1.default.Component {
|
|
|
7645
7710
|
});
|
|
7646
7711
|
};
|
|
7647
7712
|
return () => {
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
this.batchUpdatePromise = new Promise((res) => (this.batchUpdateResolver = res));
|
|
7651
|
-
this.batchUpdatePromise.then(() => {
|
|
7652
|
-
this.batchUpdatePromise = null;
|
|
7653
|
-
this.batchUpdateResolver = null;
|
|
7654
|
-
this.onDidUpdateEmitter.fire();
|
|
7655
|
-
});
|
|
7713
|
+
var _a;
|
|
7714
|
+
const doUpdate = (batchUpdatePromise, batchUpdateResolver) => {
|
|
7656
7715
|
// 更新批量更新返回的promise对象
|
|
7657
7716
|
if (lastFrame) {
|
|
7658
7717
|
window.cancelAnimationFrame(lastFrame);
|
|
7659
7718
|
}
|
|
7660
|
-
lastFrame = requestAnimationFrame(
|
|
7719
|
+
lastFrame = requestAnimationFrame(() => {
|
|
7720
|
+
commitUpdate(batchUpdateResolver);
|
|
7721
|
+
});
|
|
7722
|
+
return batchUpdatePromise;
|
|
7723
|
+
};
|
|
7724
|
+
if (!this.batchUpdatePromise) {
|
|
7725
|
+
let batchUpdateResolver;
|
|
7726
|
+
this.batchUpdatePromise = new Promise((res) => (batchUpdateResolver = res));
|
|
7727
|
+
(_a = this.batchUpdatePromise) === null || _a === void 0 ? void 0 : _a.then(() => {
|
|
7728
|
+
this.onDidUpdateEmitter.fire();
|
|
7729
|
+
this.batchUpdatePromise = null;
|
|
7730
|
+
});
|
|
7731
|
+
doUpdate(this.batchUpdatePromise, batchUpdateResolver);
|
|
7732
|
+
return this.batchUpdatePromise;
|
|
7733
|
+
}
|
|
7734
|
+
else {
|
|
7735
|
+
if (!this.delayedUpdatePromise) {
|
|
7736
|
+
let delayedUpdateResolver;
|
|
7737
|
+
this.delayedUpdatePromise = new Promise((resolve) => {
|
|
7738
|
+
delayedUpdateResolver = resolve;
|
|
7739
|
+
});
|
|
7740
|
+
this.batchUpdatePromise.then(() => {
|
|
7741
|
+
var _a;
|
|
7742
|
+
this.batchUpdatePromise = this.delayedUpdatePromise;
|
|
7743
|
+
this.delayedUpdatePromise = null;
|
|
7744
|
+
(_a = this.batchUpdatePromise) === null || _a === void 0 ? void 0 : _a.then(() => {
|
|
7745
|
+
this.onDidUpdateEmitter.fire();
|
|
7746
|
+
this.batchUpdatePromise = null;
|
|
7747
|
+
});
|
|
7748
|
+
doUpdate(this.batchUpdatePromise, delayedUpdateResolver);
|
|
7749
|
+
this.batchUpdateQueue = 0;
|
|
7750
|
+
});
|
|
7751
|
+
}
|
|
7752
|
+
else {
|
|
7753
|
+
this.batchUpdateQueue++;
|
|
7754
|
+
}
|
|
7755
|
+
return this.delayedUpdatePromise;
|
|
7661
7756
|
}
|
|
7662
|
-
return this.batchUpdatePromise;
|
|
7663
7757
|
};
|
|
7664
7758
|
})();
|
|
7665
7759
|
// 使用箭头函数绑定当前this
|
|
@@ -7968,6 +8062,12 @@ class RecycleTree extends react_1.default.Component {
|
|
|
7968
8062
|
}
|
|
7969
8063
|
};
|
|
7970
8064
|
}
|
|
8065
|
+
getUpdatePromise() {
|
|
8066
|
+
if (this.delayedUpdatePromise) {
|
|
8067
|
+
return this.delayedUpdatePromise;
|
|
8068
|
+
}
|
|
8069
|
+
return this.batchUpdatePromise;
|
|
8070
|
+
}
|
|
7971
8071
|
getNewPromptInsertIndex(startIndex, parent) {
|
|
7972
8072
|
const { root } = this.props.model;
|
|
7973
8073
|
let insertIndex = startIndex + 1;
|
|
@@ -8074,7 +8174,7 @@ class RecycleTree extends react_1.default.Component {
|
|
|
8074
8174
|
}
|
|
8075
8175
|
utils_1.Event.once(this.props.model.onChange)(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
8076
8176
|
var _a, _b;
|
|
8077
|
-
yield this.
|
|
8177
|
+
yield this.getUpdatePromise();
|
|
8078
8178
|
if (node.constructor === NewPromptHandle_1.NewPromptHandle && !node.destroyed) {
|
|
8079
8179
|
(_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.scrollToItem(this.newPromptInsertionIndex);
|
|
8080
8180
|
}
|
|
@@ -14656,6 +14756,7 @@ exports.defaultIconfont = {
|
|
|
14656
14756
|
'arrowup': 'arrowup',
|
|
14657
14757
|
'basement': 'basement',
|
|
14658
14758
|
'basement-fileicon': 'basement-fileicon',
|
|
14759
|
+
'bash': 'bash',
|
|
14659
14760
|
'bell': 'bell',
|
|
14660
14761
|
'branches': 'branches',
|
|
14661
14762
|
'breakpoint-activate': 'breakpoint-activate',
|
|
@@ -14664,6 +14765,7 @@ exports.defaultIconfont = {
|
|
|
14664
14765
|
'breakpoint-enabled': 'breakpoint-enabled',
|
|
14665
14766
|
'breakpoint-stop': 'breakpoint-stop',
|
|
14666
14767
|
'breakpoint-stop-before': 'breakpoint-stop-before',
|
|
14768
|
+
'brew': 'brew',
|
|
14667
14769
|
'browser-preview': 'browser-preview',
|
|
14668
14770
|
'bulb-fill': 'bulb-fill',
|
|
14669
14771
|
'caret-right': 'caret-right',
|
|
@@ -14692,8 +14794,8 @@ exports.defaultIconfont = {
|
|
|
14692
14794
|
'dashboard-fill': 'dashboard-fill',
|
|
14693
14795
|
'deactivate-breakpoints': 'deactivate-breakpoints',
|
|
14694
14796
|
'debug': 'debug',
|
|
14695
|
-
'debug-restart-frame': 'debug-restart-frame',
|
|
14696
14797
|
'debug-alt-small': 'debug-alt-small',
|
|
14798
|
+
'debug-restart-frame': 'debug-restart-frame',
|
|
14697
14799
|
'delete': 'delete',
|
|
14698
14800
|
'deploy': 'deploy',
|
|
14699
14801
|
'detail': 'detail',
|
|
@@ -14731,21 +14833,26 @@ exports.defaultIconfont = {
|
|
|
14731
14833
|
'follow-cursor': 'follow-cursor',
|
|
14732
14834
|
'fullscreen': 'fullscreen',
|
|
14733
14835
|
'fullscreen-exit': 'fullscreen-exit',
|
|
14836
|
+
'git': 'git',
|
|
14734
14837
|
'github-fill': 'github-fill',
|
|
14735
14838
|
'gitlab': 'gitlab',
|
|
14736
14839
|
'global-search': 'global-search',
|
|
14840
|
+
'go': 'go',
|
|
14737
14841
|
'huoban': 'huoban',
|
|
14738
14842
|
'huoban-blue': 'huoban-blue',
|
|
14739
14843
|
'info-circle': 'info-circle',
|
|
14740
14844
|
'info-circle-fill': 'info-circle-fill',
|
|
14845
|
+
'java': 'java',
|
|
14741
14846
|
'kaitian': 'kaitian',
|
|
14742
14847
|
'keyboard': 'keyboard',
|
|
14848
|
+
'kotlin': 'kotlin',
|
|
14743
14849
|
'layout': 'layout',
|
|
14744
14850
|
'layout1': 'layout1',
|
|
14745
14851
|
'left': 'left',
|
|
14746
14852
|
'left-right-subfield': 'left-right-subfield',
|
|
14747
14853
|
'line': 'line',
|
|
14748
14854
|
'link': 'link',
|
|
14855
|
+
'loading': 'loading',
|
|
14749
14856
|
'max': 'max',
|
|
14750
14857
|
'message': 'message',
|
|
14751
14858
|
'min': 'min',
|
|
@@ -14756,12 +14863,14 @@ exports.defaultIconfont = {
|
|
|
14756
14863
|
'more': 'more',
|
|
14757
14864
|
'new-file': 'new-file',
|
|
14758
14865
|
'new-folder': 'new-folder',
|
|
14866
|
+
'node': 'node',
|
|
14759
14867
|
'open': 'open',
|
|
14760
14868
|
'open-changes': 'open-changes',
|
|
14761
14869
|
'openfile': 'openfile',
|
|
14762
14870
|
'pause': 'pause',
|
|
14763
14871
|
'plus': 'plus',
|
|
14764
14872
|
'project-information': 'project-information',
|
|
14873
|
+
'python': 'python',
|
|
14765
14874
|
'question-circle': 'question-circle',
|
|
14766
14875
|
'question-circle-o': 'question-circle-o',
|
|
14767
14876
|
'refresh': 'refresh',
|
|
@@ -14772,6 +14881,7 @@ exports.defaultIconfont = {
|
|
|
14772
14881
|
'retrieval': 'retrieval',
|
|
14773
14882
|
'right': 'right',
|
|
14774
14883
|
'rollback': 'rollback',
|
|
14884
|
+
'rust': 'rust',
|
|
14775
14885
|
'save-all': 'save-all',
|
|
14776
14886
|
'scm': 'scm',
|
|
14777
14887
|
'search': 'search',
|
|
@@ -14794,11 +14904,13 @@ exports.defaultIconfont = {
|
|
|
14794
14904
|
'time-circle-fill': 'time-circle-fill',
|
|
14795
14905
|
'toolkit': 'toolkit',
|
|
14796
14906
|
'tree': 'tree',
|
|
14907
|
+
'ubuntu': 'ubuntu',
|
|
14797
14908
|
'undock': 'undock',
|
|
14798
14909
|
'unmax': 'unmax',
|
|
14799
14910
|
'unorderedlist': 'unorderedlist',
|
|
14800
14911
|
'up': 'up',
|
|
14801
14912
|
'up-down-subfield': 'up-down-subfield',
|
|
14913
|
+
'vim': 'vim',
|
|
14802
14914
|
'wait': 'wait',
|
|
14803
14915
|
'warning-circle': 'warning-circle',
|
|
14804
14916
|
'warning-circle-fill': 'warning-circle-fill',
|
|
@@ -14,6 +14,7 @@ export declare const defaultIconMap: {
|
|
|
14
14
|
arrowup: string;
|
|
15
15
|
basement: string;
|
|
16
16
|
'basement-fileicon': string;
|
|
17
|
+
bash: string;
|
|
17
18
|
bell: string;
|
|
18
19
|
branches: string;
|
|
19
20
|
'breakpoint-activate': string;
|
|
@@ -22,6 +23,7 @@ export declare const defaultIconMap: {
|
|
|
22
23
|
'breakpoint-enabled': string;
|
|
23
24
|
'breakpoint-stop': string;
|
|
24
25
|
'breakpoint-stop-before': string;
|
|
26
|
+
brew: string;
|
|
25
27
|
'browser-preview': string;
|
|
26
28
|
'bulb-fill': string;
|
|
27
29
|
'caret-right': string;
|
|
@@ -50,8 +52,8 @@ export declare const defaultIconMap: {
|
|
|
50
52
|
'dashboard-fill': string;
|
|
51
53
|
'deactivate-breakpoints': string;
|
|
52
54
|
debug: string;
|
|
53
|
-
'debug-restart-frame': string;
|
|
54
55
|
'debug-alt-small': string;
|
|
56
|
+
'debug-restart-frame': string;
|
|
55
57
|
delete: string;
|
|
56
58
|
deploy: string;
|
|
57
59
|
detail: string;
|
|
@@ -89,21 +91,26 @@ export declare const defaultIconMap: {
|
|
|
89
91
|
'follow-cursor': string;
|
|
90
92
|
fullscreen: string;
|
|
91
93
|
'fullscreen-exit': string;
|
|
94
|
+
git: string;
|
|
92
95
|
'github-fill': string;
|
|
93
96
|
gitlab: string;
|
|
94
97
|
'global-search': string;
|
|
98
|
+
go: string;
|
|
95
99
|
huoban: string;
|
|
96
100
|
'huoban-blue': string;
|
|
97
101
|
'info-circle': string;
|
|
98
102
|
'info-circle-fill': string;
|
|
103
|
+
java: string;
|
|
99
104
|
kaitian: string;
|
|
100
105
|
keyboard: string;
|
|
106
|
+
kotlin: string;
|
|
101
107
|
layout: string;
|
|
102
108
|
layout1: string;
|
|
103
109
|
left: string;
|
|
104
110
|
'left-right-subfield': string;
|
|
105
111
|
line: string;
|
|
106
112
|
link: string;
|
|
113
|
+
loading: string;
|
|
107
114
|
max: string;
|
|
108
115
|
message: string;
|
|
109
116
|
min: string;
|
|
@@ -114,12 +121,14 @@ export declare const defaultIconMap: {
|
|
|
114
121
|
more: string;
|
|
115
122
|
'new-file': string;
|
|
116
123
|
'new-folder': string;
|
|
124
|
+
node: string;
|
|
117
125
|
open: string;
|
|
118
126
|
'open-changes': string;
|
|
119
127
|
openfile: string;
|
|
120
128
|
pause: string;
|
|
121
129
|
plus: string;
|
|
122
130
|
'project-information': string;
|
|
131
|
+
python: string;
|
|
123
132
|
'question-circle': string;
|
|
124
133
|
'question-circle-o': string;
|
|
125
134
|
refresh: string;
|
|
@@ -130,6 +139,7 @@ export declare const defaultIconMap: {
|
|
|
130
139
|
retrieval: string;
|
|
131
140
|
right: string;
|
|
132
141
|
rollback: string;
|
|
142
|
+
rust: string;
|
|
133
143
|
'save-all': string;
|
|
134
144
|
scm: string;
|
|
135
145
|
search: string;
|
|
@@ -152,11 +162,13 @@ export declare const defaultIconMap: {
|
|
|
152
162
|
'time-circle-fill': string;
|
|
153
163
|
toolkit: string;
|
|
154
164
|
tree: string;
|
|
165
|
+
ubuntu: string;
|
|
155
166
|
undock: string;
|
|
156
167
|
unmax: string;
|
|
157
168
|
unorderedlist: string;
|
|
158
169
|
up: string;
|
|
159
170
|
'up-down-subfield': string;
|
|
171
|
+
vim: string;
|
|
160
172
|
wait: string;
|
|
161
173
|
'warning-circle': string;
|
|
162
174
|
'warning-circle-fill': string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconManager.d.ts","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,CAAC;AA4B3B,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"iconManager.d.ts","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,CAAC;AA4B3B,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMzB,CAAC;AAEH,cAAM,WAAW;IACf,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,QAAQ,CAA+D;IAE/E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAKnE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;CAiBtC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -46,6 +46,10 @@ class IconManager {
|
|
|
46
46
|
this._ktIconPrefixes.push(prefix);
|
|
47
47
|
}
|
|
48
48
|
getIconClx(iconKey) {
|
|
49
|
+
if (!iconKey) {
|
|
50
|
+
(0, warning_1.default)(false, 'not a valid icon key:' + iconKey);
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
49
53
|
let lastIndex = this._ktIconPrefixes.length;
|
|
50
54
|
while (!this._iconMap[this._ktIconPrefixes[--lastIndex]][iconKey]) {
|
|
51
55
|
if (lastIndex === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconManager.js","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":";;;;AAAA,0EAA0C;AAE1C,uCAA4C;AACnC,gGADA,yBAAe,OACA;AAExB;;;GAGG;AACH,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,aAAa;IACjC,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,cAAc;IACtB,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,WAAW;IAC3B,mBAAmB,EAAE,WAAW;IAChC,WAAW,EAAE,OAAO;IACpB,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB;IAClB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,2BAA2B;IAC3B,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAe,EAAE,WAAW,CAAC,CAAC;AAEtE,QAAA,cAAc,GAAG,IAAI,KAAK,CAAC,0BAA0B,EAAE;IAClE,GAAG,CAAC,GAAG,EAAE,IAAY;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAA,iBAAO,EAAC,CAAC,SAAS,EAAE,SAAS,IAAI,6BAA6B,SAAS,WAAW,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW;IAAjB;QACU,oBAAe,GAAa,EAAE,CAAC;QAE/B,aAAQ,GAA4D,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"iconManager.js","sourceRoot":"","sources":["../../../src/icon/iconfont/iconManager.ts"],"names":[],"mappings":";;;;AAAA,0EAA0C;AAE1C,uCAA4C;AACnC,gGADA,yBAAe,OACA;AAExB;;;GAGG;AACH,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,aAAa;IACjC,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,cAAc;IACtB,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,WAAW;IAC3B,mBAAmB,EAAE,WAAW;IAChC,WAAW,EAAE,OAAO;IACpB,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB;IAClB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,MAAM;IACpB,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,2BAA2B;IAC3B,UAAU,EAAE,OAAO;IACnB,WAAW,EAAE,MAAM;CACpB,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,yBAAe,EAAE,WAAW,CAAC,CAAC;AAEtE,QAAA,cAAc,GAAG,IAAI,KAAK,CAAC,0BAA0B,EAAE;IAClE,GAAG,CAAC,GAAG,EAAE,IAAY;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAA,iBAAO,EAAC,CAAC,SAAS,EAAE,SAAS,IAAI,6BAA6B,SAAS,WAAW,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW;IAAjB;QACU,oBAAe,GAAa,EAAE,CAAC;QAE/B,aAAQ,GAA4D,EAAE,CAAC;IAwBjF,CAAC;IAtBC,MAAM,CAAC,MAAc,EAAE,aAA4C;QACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,EAAE;YACZ,IAAA,iBAAO,EAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC;SACX;QACD,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YACjE,IAAI,SAAS,KAAK,CAAC,EAAE;gBAAE,MAAM;aAAE;SAChC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAE1E,IAAI,CAAC,SAAS,EAAE;YACd,IAAA,iBAAO,EAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAEY,QAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAE7C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AACnD,qBAAqB;AACrB,mBAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,sBAAc,CAAC,CAAC"}
|