@vscode-elements/elements 1.0.0 → 1.1.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.
@@ -2,7 +2,7 @@ import { LitElement } from 'lit';
2
2
  export class VscElement extends LitElement {
3
3
  constructor() {
4
4
  super(...arguments);
5
- this._version = '1.0.0';
5
+ this._version = '1.1.0';
6
6
  }
7
7
  /** VSC Element version */
8
8
  get version() {
@@ -1 +1 @@
1
- {"version":3,"file":"VscElement.js","sourceRoot":"","sources":["../../src/includes/VscElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,UAAW,SAAQ,UAAU;IAA1C;;QACU,aAAQ,GAAG,OAAO,CAAC;IAM7B,CAAC;IAJC,0BAA0B;IAC1B,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF","sourcesContent":["import {LitElement} from 'lit';\n\nexport class VscElement extends LitElement {\n private _version = '1.0.0';\n\n /** VSC Element version */\n get version() {\n return this._version;\n }\n}\n"]}
1
+ {"version":3,"file":"VscElement.js","sourceRoot":"","sources":["../../src/includes/VscElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,UAAW,SAAQ,UAAU;IAA1C;;QACU,aAAQ,GAAG,OAAO,CAAC;IAM7B,CAAC;IAJC,0BAA0B;IAC1B,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF","sourcesContent":["import {LitElement} from 'lit';\n\nexport class VscElement extends LitElement {\n private _version = '1.1.0';\n\n /** VSC Element version */\n get version() {\n return this._version;\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- export declare const chevronDownIcon: import("lit").TemplateResult<1>;
1
+ export declare const chevronDownIcon: import("lit-html").TemplateResult<1>;
2
2
  //# sourceMappingURL=template-elements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-elements.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/template-elements.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,iCAgB3B,CAAC"}
1
+ {"version":3,"file":"template-elements.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/template-elements.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,sCAgB3B,CAAC"}
@@ -7,6 +7,18 @@ export type VscTreeActionEvent = CustomEvent<{
7
7
  item: TreeItem | null;
8
8
  value: string;
9
9
  }>;
10
+ export type VscTreeSelectEvent = CustomEvent<{
11
+ icons: {
12
+ branch?: string;
13
+ open?: string;
14
+ leaf?: string;
15
+ };
16
+ itemType: 'branch' | 'leaf';
17
+ label: string;
18
+ open: boolean;
19
+ value: string;
20
+ path: string;
21
+ }>;
10
22
  export interface TreeItemIconConfig {
11
23
  branch?: string;
12
24
  open?: string;
@@ -102,7 +114,20 @@ export declare class VscodeTree extends VscElement {
102
114
  private _focusedItem;
103
115
  private _selectedBranch;
104
116
  private _focusedBranch;
117
+ /**
118
+ * Closes all opened tree items recursively.
119
+ */
105
120
  closeAll(): void;
121
+ /**
122
+ * Deselects all selected items.
123
+ */
124
+ deselectAll(): void;
125
+ /**
126
+ * Returns a reference to a TreeItem object by path.
127
+ * @param path
128
+ * @returns
129
+ */
130
+ getItemByPath(path: number[]): TreeItem | null;
106
131
  connectedCallback(): void;
107
132
  disconnectedCallback(): void;
108
133
  private _getItemByPath;
@@ -117,6 +142,7 @@ export declare class VscodeTree extends VscElement {
117
142
  private _selectItem;
118
143
  private _focusItem;
119
144
  private _closeSubTreeRecursively;
145
+ private _deselectItemsRecursively;
120
146
  private _emitSelectEvent;
121
147
  private _focusPrevItem;
122
148
  private _focusNextItem;
@@ -130,7 +156,7 @@ declare global {
130
156
  'vscode-tree': VscodeTree;
131
157
  }
132
158
  interface GlobalEventHandlersEventMap {
133
- 'vsc-tree-select': CustomEvent;
159
+ 'vsc-tree-select': VscTreeSelectEvent;
134
160
  'vsc-tree-action': VscTreeActionEvent;
135
161
  }
136
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-tree.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vscode-tree.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"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"}
@@ -85,10 +85,28 @@ let VscodeTree = class VscodeTree extends VscElement {
85
85
  get data() {
86
86
  return this._data;
87
87
  }
88
+ /**
89
+ * Closes all opened tree items recursively.
90
+ */
88
91
  closeAll() {
89
92
  this._closeSubTreeRecursively(this.data);
90
93
  this.requestUpdate();
91
94
  }
95
+ /**
96
+ * Deselects all selected items.
97
+ */
98
+ deselectAll() {
99
+ this._deselectItemsRecursively(this.data);
100
+ this.requestUpdate();
101
+ }
102
+ /**
103
+ * Returns a reference to a TreeItem object by path.
104
+ * @param path
105
+ * @returns
106
+ */
107
+ getItemByPath(path) {
108
+ return this._getItemByPath(path);
109
+ }
92
110
  connectedCallback() {
93
111
  super.connectedCallback();
94
112
  this.addEventListener('keydown', this._handleComponentKeyDownBound);
@@ -487,6 +505,16 @@ let VscodeTree = class VscodeTree extends VscElement {
487
505
  }
488
506
  });
489
507
  }
508
+ _deselectItemsRecursively(tree) {
509
+ tree.forEach((item) => {
510
+ if (item.selected) {
511
+ item.selected = false;
512
+ }
513
+ if (item.subItems && item.subItems.length > 0) {
514
+ this._deselectItemsRecursively(item.subItems);
515
+ }
516
+ });
517
+ }
490
518
  _emitSelectEvent(item, path) {
491
519
  const { icons, label, open, value } = item;
492
520
  const detail = {
@@ -503,7 +531,9 @@ let VscodeTree = class VscodeTree extends VscElement {
503
531
  composed: true,
504
532
  detail,
505
533
  }));
506
- this.dispatchEvent(new CustomEvent('vsc-tree-select'));
534
+ this.dispatchEvent(new CustomEvent('vsc-tree-select', {
535
+ detail,
536
+ }));
507
537
  }
508
538
  _focusPrevItem() {
509
539
  if (!this._focusedItem) {
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-tree.js","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAiB,MAAM,KAAK,CAAC;AAClD,OAAO,EAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAC;AACrD,OAAO,0BAA0B,CAAC;AAClC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,MAAM,MAAM,yBAAyB,CAAC;AA+F7C,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,WAAqB,EAAE,EAAc,EAAE;IACxE,MAAM,QAAQ,GAAe,EAAE,CAAC;IAEhC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAa;YACzB,GAAG,IAAI;YACP,IAAI;SACL,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAE,EAAE;IAClC,IACE,IAAI,CAAC,QAAQ;QACb,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5B,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEI,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IAAnC;;QAeL,WAAM,GAAG,CAAC,CAAC;QAGX,WAAM,GAAG,KAAK,CAAC;QAGf,cAAS,GAAG,KAAK,CAAC;QAGlB,aAAQ,GAAG,CAAC,CAAC;QAGb,iBAAY,GAAG,KAAK,CAAC;QAEb,UAAK,GAAe,EAAE,CAAC;QAGvB,kBAAa,GAAoB,IAAI,CAAC;QAGtC,iBAAY,GAAoB,IAAI,CAAC;QAGrC,oBAAe,GAAoB,IAAI,CAAC;QAGxC,mBAAc,GAAoB,IAAI,CAAC;QAiqBvC,iCAA4B,GAClC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAoB5C,CAAC;IA3tBC,IAAI,IAAI,CAAC,GAAe;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAE1B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IA+BM,QAAQ;QACb,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACtE,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzE,CAAC;IAEO,cAAc,CAAC,IAAc;QACnC,IAAI,OAAO,GAAe,IAAI,CAAC,KAAK,CAAC;QACrC,IAAI,IAAI,GAAoB,IAAI,CAAC;QAEjC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,QAAsB,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,kBAAkB,CAAC,EAAc;QACvC,EAAE,CAAC,eAAe,EAAE,CAAC;QAErB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAoB,CAAC;QACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACrC,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;gBAElC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxB,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;gBAC1C,CAAC;YACH,CAAC;YAED,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CACb,gBAAgB,EAChB;YACE,MAAM,EAAE;gBACN,QAAQ;gBACR,IAAI;gBACJ,KAAK;aACN;SACF,CACF,CACF,CAAC;QAEF;;WAEG;QACH,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CACb,iBAAiB,EACjB;YACE,MAAM,EAAE;gBACN,QAAQ;gBACR,IAAI;gBACJ,KAAK;aACN;SACF,CACoB,CACxB,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,OAAwC;QACjE,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,OAAO,CAAC;QAE9B,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,IAAI,CAAA,qBAAqB,KAAK,oCAAoC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA;;uCAEsB,KAAK;eAC7B,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,IAAc;QAChC,MAAM,YAAY,GAAyD;YACzE,MAAM,EAAE;gBACN,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,WAAW;aAClB;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,WAAW;aAClB;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,WAAW;aAClB;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACzB,YAAY,CAAC,MAAM,GAAG;oBACpB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;oBAC3B,IAAI,EAAE,OAAO;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvB,YAAY,CAAC,IAAI,GAAG;oBAClB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;oBACzB,IAAI,EAAE,OAAO;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvB,YAAY,CAAC,IAAI,GAAG;oBAClB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;oBACzB,IAAI,EAAE,OAAO;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,YAAY,CAAC,MAAM,GAAG;oBACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;oBACxB,IAAI,EAAE,WAAW;iBAClB,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,GAAG;oBAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACtB,IAAI,EAAE,WAAW;iBAClB,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,GAAG;oBAClB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACtB,IAAI,EAAE,WAAW;iBAClB,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,IAAc;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,EAAC,IAAI,GAAG,KAAK,EAAC,GAAG,IAAI,CAAC;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;QAE9D,OAAO,IAAI,CAAA;;6BAEc,aAAa;;KAErC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,IAAc;QACnC,MAAM,aAAa,GAAqB,EAAE,CAAC;QAE3C,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACrC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,IAAI,CAAA;mBACR,MAAM,CAAC,IAAI;;oBAEV,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;6BAChB,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;yBACnC,KAAK;;qBAET,IAAI,CAAC,kBAAkB;0BAClB,CAAC;oBAEjB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAA,wBAAwB,aAAa,QAAQ,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,IAAc;QACvC,MAAM,WAAW,GAAqB,EAAE,CAAC;QAEzC,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACtC,MAAM,EACJ,UAAU,GAAG,MAAM,EACnB,WAAW,GAAG,QAAQ,EACtB,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,EAAE,EACV,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,EAAE,EACf,aAAa,GAAG,EAAE,GACnB,GAAG,UAAU,CAAC;gBACf,MAAM,gBAAgB,GAAG,gBAAgB,WAAW,EAAE,CAAC;gBACvD,MAAM,YAAY,GAA4B,EAAE,CAAC;gBAEjD,IAAI,KAAK,EAAE,CAAC;oBACV,YAAY,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBAClC,CAAC;gBAED,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,iBAAiB,CAAC,GAAG,YAAY,CAAC;gBACjD,CAAC;gBAED,IAAI,UAAU,EAAE,CAAC;oBACf,YAAY,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;gBAC7C,CAAC;gBAED,IAAI,aAAa,EAAE,CAAC;oBAClB,YAAY,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAAC;gBACnD,CAAC;gBAED,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,eAAe;wBAClB,WAAW,CAAC,IAAI,CACd,IAAI,CAAA;;wBAEM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;mBAClD,OAAO;gBACV,CACH,CAAC;wBACF,MAAM;oBACR,KAAK,eAAe;wBAClB,WAAW,CAAC,IAAI,CACd,IAAI,CAAA;;;wBAGM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC7C,QAAQ,CAAC,YAAY,CAAC;8BAChB,CACjB,CAAC;wBACF,MAAM;oBACR,KAAK,MAAM;wBACT,WAAW,CAAC,IAAI,CACd,IAAI,CAAA;wBACM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBAC/C,QAAQ,CAAC,YAAY,CAAC;;kBAE5B,OAAO;qBACJ,CACR,CAAC;wBACF,MAAM;oBACR,QAAQ;gBACV,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAA,4BAA4B,WAAW,QAAQ,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAA,GAAG,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,eAAe,CACrB,IAAc,EACd,iBAKC;QAED,MAAM,EACJ,IAAI,GAAG,KAAK,EACZ,KAAK,EACL,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,EAAE,GACd,GAAG,IAAI,CAAC;QACT,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,cAAc,GAAG,KAAK,EACtB,eAAe,GAAG,KAAK,GACxB,GAAG,iBAAiB,CAAC;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,MAAM,eAAe,GAAG,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,IAAI,QAAQ,KAAK,MAAM;YAChC,CAAC,CAAC,iBAAiB,GAAG,UAAU;YAChC,CAAC,CAAC,UAAU,CAAC;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM;YAChC,CAAC,CAAC,UAAU,GAAG,gBAAgB;YAC/B,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC;QACjC,MAAM,aAAa,GACjB,IAAI,IAAI,QAAQ,KAAK,QAAQ;YAC3B,CAAC,CAAC,IAAI,CAAA;oBACM,QAAQ,CAAC,EAAC,oBAAoB,EAAE,GAAG,cAAc,IAAI,EAAC,CAAC;oBACvD,QAAQ,CAAC;gBACf,iBAAiB,EAAE,cAAc,IAAI,eAAe;aACrD,CAAC;;cAEA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC;gBAC9B;YACR,CAAC,CAAC,OAAO,CAAC;QACd,MAAM,iBAAiB,GAAG,WAAW;YACnC,CAAC,CAAC,IAAI,CAAA,6BAA6B,WAAW,SAAS;YACvD,CAAC,CAAC,OAAO,CAAC;QACZ,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAExD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,QAAQ,EAAE,CAAC;YACb,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAA;uBACQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;;mBAEjD,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;mBACzB,QAAQ,CAAC,EAAC,WAAW,EAAE,GAAG,OAAO,GAAG,eAAe,IAAI,EAAC,CAAC;;YAEhE,WAAW,GAAG,UAAU;eACrB,KAAK,GAAG,iBAAiB;;YAE5B,aAAa,IAAI,iBAAiB;;UAEpC,aAAa;;KAElB,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,IAAgB,EAAE,UAAoB,EAAE;QAC1D,MAAM,GAAG,GAAqB,EAAE,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YACpD,MAAM,EACJ,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,cAAc,GAAG,KAAK,EACtB,eAAe,GAAG,KAAK,GACxB,GAAG,IAAI,CAAC;YAET,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,GAAG,CAAC,IAAI,CACN,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;gBACzB,IAAI;gBACJ,QAAQ;gBACR,cAAc;gBACd,eAAe;aAChB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,WAAW,CAAC,IAAc;QAChC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtC,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/C,CAAC;QAED,IAAI,YAAY,GAAoB,IAAI,CAAC;QAEzC,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAEvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;oBACpC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEjE,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;oBACpC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,gBAAgB,CACnB,IAAI,CAAC,aAAyB,EAC9B,IAAI,CAAC,aAAa,CAAC,IAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CACnC,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,UAAU,CAAC,IAAc;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;QAE1C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,KAAK,CAAC;QAC7C,CAAC;QAED,IAAI,YAAY,GAAoB,IAAI,CAAC;QAEzC,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;gBACnC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;gBACtC,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;gBACnC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,IAAgB;QAC/C,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAElB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,IAAc,EAAE,IAAY;QACnD,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,GAAG,IAAI,CAAC;QACzC,MAAM,MAAM,GAAG;YACb,KAAK;YACL,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,MAAmB;YAC1D,KAAK;YACL,IAAI,EAAE,IAAI,IAAI,KAAK;YACnB,KAAK,EAAE,KAAK,IAAI,KAAK;YACrB,IAAI;SACL,CAAC;QAEF,+CAA+C;QAC/C,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAoB,YAAY,EAAE;YAC/C,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM;SACP,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAEjC,IAAI,IAAI,IAAI,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,IAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAEnC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC1B,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC,CAAC;gBAEnD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAa,CAAC;gBAC7D,IAAI,cAAc,GAAG,WAAW,CAAC;gBAEjC,IAAI,WAAW,EAAE,IAAI,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;oBACtD,MAAM,EAAC,QAAQ,EAAC,GAAG,WAAW,CAAC;oBAC/B,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACjD,CAAC;gBAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;oBAEd,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAa,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAEvC,IACE,IAAI;YACJ,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YACzC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EACrC,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,GAAI,IAAiB,CAAC,CAAC;QACzC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,EAAE,CAAC;YAEf,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAEhD,IAAI,eAAe,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAiB;QACpC,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CACrC,CAAC,EAAe,EAAE,EAAE,CACjB,EAAkB,CAAC,OAAO;YAC1B,EAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CACrD,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,GAAI,aAA+B,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YACpE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAa,CAAC;YAEnD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,EAAiB;QAC/C,MAAM,IAAI,GAAkB;YAC1B,GAAG;YACH,WAAW;YACX,SAAS;YACT,OAAO;YACP,QAAQ;SACT,CAAC;QACF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAkB,CAAC;QAElC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAkB,CAAC,EAAE,CAAC;YACzC,EAAE,CAAC,eAAe,EAAE,CAAC;YACrB,EAAE,CAAC,cAAc,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAKD,MAAM;QACJ,MAAM,OAAO,GAAG,QAAQ,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS;YACvB,OAAO,EAAE,IAAI;YACb,sBAAsB,EAAE,CAAC,IAAI,CAAC,YAAY;YAC1C,gBAAgB,EAAE,CAAC,IAAI,CAAC,aAAa;YACrC,kBAAkB,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI;SAChD,CAAC,CAAC;QAEH,OAAO,IAAI,CAAA;qBACM,IAAI,CAAC,YAAY,YAAY,OAAO;;YAE7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;;KAGnC,CAAC;IACJ,CAAC;;AA7tBM,iBAAM,GAAG,MAAM,AAAT,CAAU;AAGvB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;sCAMvC;AAMD;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;0CACd;AAGX;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;0CAC1B;AAGf;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;6CACvB;AAGlB;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;4CAC3B;AAGb;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAC,CAAC;gDAChD;AAKb;IADP,KAAK,EAAE;iDACsC;AAGtC;IADP,KAAK,EAAE;gDACqC;AAGrC;IADP,KAAK,EAAE;mDACwC;AAGxC;IADP,KAAK,EAAE;kDACuC;AAzCpC,UAAU;IADtB,aAAa,CAAC,aAAa,CAAC;GAChB,UAAU,CA+tBtB","sourcesContent":["import {html, nothing, TemplateResult} from 'lit';\nimport {customElement, property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport {VscElement} from '../includes/VscElement.js';\nimport '../vscode-badge/index.js';\nimport '../vscode-icon/index.js';\nimport {VscodeIcon} from '../vscode-icon/index.js';\nimport styles from './vscode-tree.styles.js';\n\nexport type VscTreeActionEvent = CustomEvent<{\n actionId: string;\n item: TreeItem | null;\n value: string;\n}>;\n\ntype ListenedKey = 'ArrowDown' | 'ArrowUp' | 'Enter' | 'Escape' | ' ';\n\ntype IconType = 'themeicon' | 'image';\n\ntype IconVariant = 'branch' | 'leaf' | 'open';\n\nexport interface TreeItemIconConfig {\n branch?: string;\n open?: string;\n leaf?: string;\n}\n\n/** Action icon configuration. */\nexport interface TreeItemAction {\n /** A unique name that identifies the clicked action item. */\n actionId: string;\n /** A Codicon name. */\n icon: string;\n /** Text description of the action. */\n tooltip?: string;\n}\n\n/**\n * The decoration is additional content on the right side of the tree item. It can be a short text,\n * a counter, or a small, filled circle. A color can be defined for the different states. If\n * multiple states are applied to the item, the color with higher precedence will be used. The color\n * precedence from higher to lower is selected, focused, hover, normal. Colors will not be applied\n * to the counter badge.\n */\nexport interface TreeItemDecoration {\n /** Text content of the decoration. If the appearance is `filled-circle`, it will be ignored. */\n content?: string;\n /** Appearance of the decoration. */\n appearance?: 'text' | 'counter-badge' | 'filled-circle';\n /**\n * When is decoration visible?\n * - `active`: visible when the tree item is focused, selected or hovered\n * - `normal`: visible when there is not any interaction on the tree item\n * - `always`: always visible\n */\n visibleWhen?: 'active' | 'normal' | 'always';\n /** A valid CSS property value to define a default color. */\n color?: string;\n /** A valid CSS property value to define the color for the mouse over state. */\n hoverColor?: string;\n /** A valid CSS property value to define the color for the focused state. */\n focusedColor?: string;\n /** A valid CSS property value to define the color for the selected state. */\n selectedColor?: string;\n}\n\nexport interface TreeItem {\n label: string;\n description?: string;\n subItems?: TreeItem[];\n actions?: TreeItemAction[];\n open?: boolean;\n selected?: boolean;\n focused?: boolean;\n hasSelectedItem?: boolean;\n hasFocusedItem?: boolean;\n icons?: TreeItemIconConfig | boolean;\n iconUrls?: TreeItemIconConfig;\n value?: string;\n path?: number[];\n decorations?: TreeItemDecoration[];\n}\n\ntype ItemType = 'branch' | 'leaf';\n\n/** Event payload of the `vsc-select` event. */\ninterface SelectEventDetail {\n /** Icon configuration of the clicked item */\n icons: TreeItemIconConfig | undefined | boolean;\n /** Is item type branch or leaf. */\n itemType: ItemType;\n /** The visible label of the item. */\n label: string;\n /** The value associated to the item. */\n value: string;\n /** Is the item opened if it's a branch. */\n open: boolean;\n /** Path represents the item place in the tree. For example 1/2/3 means:\n * `data[1].subItems[2].subItems[3]` */\n path: string; // ex.: 0/0/1\n}\n\nconst ARROW_OUTER_WIDTH = 30;\nconst ARROW_ICON_WIDTH = 16;\nconst CONTENT_PADDING = 3;\n\nconst addPath = (tree: TreeItem[], prevPath: number[] = []): TreeItem[] => {\n const nextTree: TreeItem[] = [];\n\n tree.forEach((item, index) => {\n const path = [...prevPath, index];\n const nextItem: TreeItem = {\n ...item,\n path,\n };\n\n if (item.subItems) {\n nextItem.subItems = addPath(item.subItems, path);\n }\n\n nextTree.push(nextItem);\n });\n\n return nextTree;\n};\n\nconst isBranch = (item: TreeItem) => {\n if (\n item.subItems &&\n Array.isArray(item.subItems) &&\n item?.subItems?.length > 0\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @fires vsc-select Dispatched when an item is selected.\n * @fires {CustomEvent} vsc-tree-select Dispatched when an item is selected.\n * @fires vsc-run-action Dispatched when an action icon is clicked.\n * @fires {VscTreeActionEvent} vsc-tree-action Dispatched when an action icon is clicked.\n *\n * @cssprop --vscode-focusBorder\n * @cssprop --vscode-font-family\n * @cssprop --vscode-font-size\n * @cssprop --vscode-font-weight\n * @cssprop --vscode-list-hoverForeground\n * @cssprop --vscode-list-hoverBackground\n * @cssprop --vscode-list-inactiveSelectionBackground\n * @cssprop --vscode-list-inactiveSelectionForeground\n * @cssprop --vscode-list-activeSelectionBackground\n * @cssprop --vscode-list-activeSelectionForeground\n * @cssprop --vscode-list-inactiveSelectionIconForeground\n * @cssprop --vscode-list-inactiveFocusBackground\n * @cssprop --vscode-list-inactiveFocusOutline\n * @cssprop --vscode-list-focusOutline\n * @cssprop --vscode-tree-inactiveIndentGuidesStroke\n * @cssprop --vscode-tree-indentGuidesStroke\n */\n@customElement('vscode-tree')\nexport class VscodeTree extends VscElement {\n static styles = styles;\n\n @property({type: Array, reflect: false})\n set data(val: TreeItem[]) {\n const oldVal = this._data;\n\n this._data = addPath(val);\n this.requestUpdate('data', oldVal);\n }\n get data(): TreeItem[] {\n return this._data;\n }\n\n @property({type: Number})\n indent = 8;\n\n @property({type: Boolean, reflect: true})\n arrows = false;\n\n @property({type: Boolean, reflect: true})\n multiline = false;\n\n @property({type: Number, reflect: true})\n tabindex = 0;\n\n @property({type: Boolean, reflect: true, attribute: 'indent-guides'})\n indentGuides = false;\n\n private _data: TreeItem[] = [];\n\n @state()\n private _selectedItem: TreeItem | null = null;\n\n @state()\n private _focusedItem: TreeItem | null = null;\n\n @state()\n private _selectedBranch: TreeItem | null = null;\n\n @state()\n private _focusedBranch: TreeItem | null = null;\n\n public closeAll(): void {\n this._closeSubTreeRecursively(this.data);\n this.requestUpdate();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('keydown', this._handleComponentKeyDownBound);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleComponentKeyDownBound);\n }\n\n private _getItemByPath(path: number[]): TreeItem | null {\n let current: TreeItem[] = this._data;\n let item: TreeItem | null = null;\n\n path.forEach((el, i) => {\n if (i === path.length - 1) {\n item = current[el];\n } else {\n current = current[el].subItems as TreeItem[];\n }\n });\n\n return item;\n }\n\n private _handleActionClick(ev: MouseEvent) {\n ev.stopPropagation();\n\n const el = ev.target as VscodeIcon;\n const itemPath = el.dataset.itemPath;\n const actionIndex = el.dataset.index;\n let item: TreeItem | null = null;\n let actionId = '';\n let value = '';\n\n if (itemPath) {\n const path = itemPath.split('/').map((p) => Number(p));\n item = this._getItemByPath(path);\n\n if (item?.actions) {\n const index = Number(actionIndex);\n\n if (item.actions[index]) {\n actionId = item.actions[index].actionId;\n }\n }\n\n if (item?.value) {\n value = item.value;\n }\n }\n\n /** @deprecated Renamed to `vsc-tree-action` */\n this.dispatchEvent(\n new CustomEvent<{actionId: string; item: TreeItem | null; value: string}>(\n 'vsc-run-action',\n {\n detail: {\n actionId,\n item,\n value,\n },\n }\n )\n );\n\n /**\n * Dispatched when an action icon is clicked.\n */\n this.dispatchEvent(\n new CustomEvent<{actionId: string; item: TreeItem | null; value: string}>(\n 'vsc-tree-action',\n {\n detail: {\n actionId,\n item,\n value,\n },\n }\n ) as VscTreeActionEvent\n );\n }\n\n private _renderIconVariant(variant: {value: string; type: IconType}) {\n const {type, value} = variant;\n\n if (type === 'themeicon') {\n return html`<vscode-icon name=${value} class=\"theme-icon\"></vscode-icon>`;\n } else {\n return html`<span\n class=\"image-icon\"\n style=\"background-image: url(${value});\"\n ></span>`;\n }\n }\n\n private _renderIcon(item: TreeItem): TemplateResult {\n const iconVariants: Record<IconVariant, {value: string; type: IconType}> = {\n branch: {\n value: 'folder',\n type: 'themeicon',\n },\n open: {\n value: 'folder-opened',\n type: 'themeicon',\n },\n leaf: {\n value: 'file',\n type: 'themeicon',\n },\n };\n\n if (item.iconUrls) {\n if (item.iconUrls.branch) {\n iconVariants.branch = {\n value: item.iconUrls.branch,\n type: 'image',\n };\n }\n\n if (item.iconUrls.leaf) {\n iconVariants.leaf = {\n value: item.iconUrls.leaf,\n type: 'image',\n };\n }\n\n if (item.iconUrls.open) {\n iconVariants.open = {\n value: item.iconUrls.open,\n type: 'image',\n };\n }\n } else if (typeof item.icons === 'object') {\n if (item.icons.branch) {\n iconVariants.branch = {\n value: item.icons.branch,\n type: 'themeicon',\n };\n }\n\n if (item.icons.leaf) {\n iconVariants.leaf = {\n value: item.icons.leaf,\n type: 'themeicon',\n };\n }\n\n if (item.icons.open) {\n iconVariants.open = {\n value: item.icons.open,\n type: 'themeicon',\n };\n }\n } else if (!item.icons) {\n return html`${nothing}`;\n }\n\n if (isBranch(item)) {\n if (item.open) {\n return this._renderIconVariant(iconVariants.open);\n } else {\n return this._renderIconVariant(iconVariants.branch);\n }\n } else {\n return this._renderIconVariant(iconVariants.leaf);\n }\n }\n\n private _renderArrow(item: TreeItem): TemplateResult {\n if (!this.arrows || !isBranch(item)) {\n return html`${nothing}`;\n }\n\n const {open = false} = item;\n const arrowIconName = open ? 'chevron-down' : 'chevron-right';\n\n return html`\n <div class=\"arrow-container\">\n <vscode-icon name=\"${arrowIconName}\" class=\"icon-arrow\"></vscode-icon>\n </div>\n `;\n }\n\n private _renderActions(item: TreeItem): TemplateResult {\n const actionButtons: TemplateResult[] = [];\n\n if (item.actions && Array.isArray(item.actions)) {\n item.actions.forEach((action, index) => {\n if (action.icon) {\n const icon = html`<vscode-icon\n name=${action.icon}\n action-icon\n title=${ifDefined(action.tooltip)}\n data-item-path=${ifDefined(item.path?.join('/'))}\n data-index=${index}\n class=\"action-icon\"\n @click=${this._handleActionClick}\n ></vscode-icon>`;\n\n actionButtons.push(icon);\n }\n });\n }\n\n if (actionButtons.length > 0) {\n return html`<div class=\"actions\">${actionButtons}</div>`;\n } else {\n return html`${nothing}`;\n }\n }\n\n private _renderDecorations(item: TreeItem) {\n const decorations: TemplateResult[] = [];\n\n if (item.decorations && Array.isArray(item.decorations)) {\n item.decorations.forEach((decoration) => {\n const {\n appearance = 'text',\n visibleWhen = 'always',\n content = '',\n color = '',\n focusedColor = '',\n hoverColor = '',\n selectedColor = '',\n } = decoration;\n const visibleWhenClass = `visible-when-${visibleWhen}`;\n const inlineStyles: {[key: string]: string} = {};\n\n if (color) {\n inlineStyles['--color'] = color;\n }\n\n if (focusedColor) {\n inlineStyles['--focused-color'] = focusedColor;\n }\n\n if (hoverColor) {\n inlineStyles['--hover-color'] = hoverColor;\n }\n\n if (selectedColor) {\n inlineStyles['--selected-color'] = selectedColor;\n }\n\n switch (appearance) {\n case 'counter-badge':\n decorations.push(\n html`<vscode-badge\n variant=\"counter\"\n class=${['counter-badge', visibleWhenClass].join(' ')}\n >${content}</vscode-badge\n >`\n );\n break;\n case 'filled-circle':\n decorations.push(\n html`<vscode-icon\n name=\"circle-filled\"\n size=\"14\"\n class=${['filled-circle', visibleWhenClass].join(' ')}\n style=${styleMap(inlineStyles)}\n ></vscode-icon>`\n );\n break;\n case 'text':\n decorations.push(\n html`<div\n class=${['decoration-text', visibleWhenClass].join(' ')}\n style=${styleMap(inlineStyles)}\n >\n ${content}\n </div>`\n );\n break;\n default:\n }\n });\n }\n\n if (decorations.length > 0) {\n return html`<div class=\"decorations\">${decorations}</div>`;\n } else {\n return html`${nothing}`;\n }\n }\n\n private _renderTreeItem(\n item: TreeItem,\n additionalOptions: {\n path: number[];\n itemType: ItemType;\n hasFocusedItem: boolean;\n hasSelectedItem: boolean;\n }\n ) {\n const {\n open = false,\n label,\n description = '',\n selected = false,\n focused = false,\n subItems = [],\n } = item;\n const {\n path,\n itemType,\n hasFocusedItem = false,\n hasSelectedItem = false,\n } = additionalOptions;\n const indentLevel = path.length - 1;\n const contentsClasses = ['contents'];\n const liClasses = open ? ['open'] : [];\n const indentSize = indentLevel * this.indent;\n const padLeft =\n this.arrows && itemType === 'leaf'\n ? ARROW_OUTER_WIDTH + indentSize\n : indentSize;\n const arrowMarkup = this._renderArrow(item);\n const iconMarkup = this._renderIcon(item);\n const indentGuidePos = this.arrows\n ? indentSize + ARROW_ICON_WIDTH\n : indentSize + CONTENT_PADDING;\n const subTreeMarkup =\n open && itemType === 'branch'\n ? html`<ul\n style=${styleMap({'--indent-guide-pos': `${indentGuidePos}px`})}\n class=${classMap({\n 'has-active-item': hasFocusedItem || hasSelectedItem,\n })}\n >\n ${this._renderTree(subItems, path)}\n </ul>`\n : nothing;\n const descriptionMarkup = description\n ? html`<span class=\"description\">${description}</span>`\n : nothing;\n const actionsMarkup = this._renderActions(item);\n const decorationsMarkup = this._renderDecorations(item);\n\n liClasses.push(itemType);\n\n if (selected) {\n contentsClasses.push('selected');\n }\n\n if (focused) {\n contentsClasses.push('focused');\n }\n\n return html`\n <li data-path=\"${path.join('/')}\" class=\"${liClasses.join(' ')}\">\n <div\n class=\"${contentsClasses.join(' ')}\"\n style=\"${styleMap({paddingLeft: `${padLeft + CONTENT_PADDING}px`})}\"\n >\n ${arrowMarkup}${iconMarkup}<span class=\"text-content\"\n >${label}${descriptionMarkup}</span\n >\n ${actionsMarkup} ${decorationsMarkup}\n </div>\n ${subTreeMarkup}\n </li>\n `;\n }\n\n private _renderTree(tree: TreeItem[], oldPath: number[] = []) {\n const ret: TemplateResult[] = [];\n\n if (!tree) {\n return nothing;\n }\n\n tree.forEach((item, index) => {\n const path = [...oldPath, index];\n const itemType = isBranch(item) ? 'branch' : 'leaf';\n const {\n selected = false,\n focused = false,\n hasFocusedItem = false,\n hasSelectedItem = false,\n } = item;\n\n if (selected) {\n this._selectedItem = item;\n }\n\n if (focused) {\n this._focusedItem = item;\n }\n\n ret.push(\n this._renderTreeItem(item, {\n path,\n itemType,\n hasFocusedItem,\n hasSelectedItem,\n })\n );\n });\n\n return ret;\n }\n\n private _selectItem(item: TreeItem) {\n if (this._selectedItem) {\n this._selectedItem.selected = false;\n }\n\n if (this._focusedItem) {\n this._focusedItem.focused = false;\n }\n\n this._selectedItem = item;\n item.selected = true;\n this._focusedItem = item;\n item.focused = true;\n\n if (this._selectedBranch) {\n this._selectedBranch.hasSelectedItem = false;\n }\n\n let parentBranch: TreeItem | null = null;\n\n if (item.path?.length && item.path.length > 1) {\n parentBranch = this._getItemByPath(item.path.slice(0, -1));\n }\n\n if (isBranch(item)) {\n this._selectedBranch = item;\n item.hasSelectedItem = true;\n item.open = !item.open;\n\n if (!item.open) {\n if (parentBranch) {\n this._selectedBranch = parentBranch;\n parentBranch.hasSelectedItem = true;\n }\n } else {\n this._selectedBranch = item;\n item.hasSelectedItem = true;\n }\n } else {\n if (item.path?.length && item.path.length > 1) {\n const parentBranch = this._getItemByPath(item.path.slice(0, -1));\n\n if (parentBranch) {\n this._selectedBranch = parentBranch;\n parentBranch.hasSelectedItem = true;\n }\n } else {\n this._selectedBranch = item;\n item.hasSelectedItem = true;\n }\n }\n\n this._emitSelectEvent(\n this._selectedItem as TreeItem,\n this._selectedItem.path!.join('/')\n );\n\n this.requestUpdate();\n }\n\n private _focusItem(item: TreeItem) {\n if (this._focusedItem) {\n this._focusedItem.focused = false;\n }\n\n this._focusedItem = item;\n item.focused = true;\n\n const isBranch = !!item?.subItems?.length;\n\n if (this._focusedBranch) {\n this._focusedBranch.hasFocusedItem = false;\n }\n\n let parentBranch: TreeItem | null = null;\n\n if (item.path?.length && item.path.length > 1) {\n parentBranch = this._getItemByPath(item.path.slice(0, -1));\n }\n\n if (!isBranch) {\n if (parentBranch) {\n this._focusedBranch = parentBranch;\n parentBranch.hasFocusedItem = true;\n }\n } else {\n if (item.open) {\n this._focusedBranch = item;\n item.hasFocusedItem = true;\n } else if (!item.open && parentBranch) {\n this._focusedBranch = parentBranch;\n parentBranch.hasFocusedItem = true;\n }\n }\n }\n\n private _closeSubTreeRecursively(tree: TreeItem[]) {\n tree.forEach((item) => {\n item.open = false;\n\n if (item.subItems && item.subItems.length > 0) {\n this._closeSubTreeRecursively(item.subItems);\n }\n });\n }\n\n private _emitSelectEvent(item: TreeItem, path: string) {\n const {icons, label, open, value} = item;\n const detail = {\n icons,\n itemType: isBranch(item) ? 'branch' : ('leaf' as ItemType),\n label,\n open: open || false,\n value: value || label,\n path,\n };\n\n /** @deprecated Renamed to `vsc-tree-select` */\n this.dispatchEvent(\n new CustomEvent<SelectEventDetail>('vsc-select', {\n bubbles: true,\n composed: true,\n detail,\n })\n );\n\n this.dispatchEvent(new CustomEvent('vsc-tree-select'));\n }\n\n private _focusPrevItem() {\n if (!this._focusedItem) {\n this._focusItem(this._data[0]);\n return;\n }\n\n const {path} = this._focusedItem;\n\n if (path && path?.length > 0) {\n const currentItemIndex = path[path.length - 1];\n const hasParent = path!.length > 1;\n\n if (currentItemIndex > 0) {\n const newPath = [...path];\n newPath[newPath.length - 1] = currentItemIndex - 1;\n\n const prevSibling = this._getItemByPath(newPath) as TreeItem;\n let newFocusedItem = prevSibling;\n\n if (prevSibling?.open && prevSibling.subItems?.length) {\n const {subItems} = prevSibling;\n newFocusedItem = subItems[subItems.length - 1];\n }\n\n this._focusItem(newFocusedItem);\n } else {\n if (hasParent) {\n const newPath = [...path];\n newPath.pop();\n\n this._focusItem(this._getItemByPath(newPath) as TreeItem);\n }\n }\n } else {\n this._focusItem(this._data[0]);\n }\n }\n\n private _focusNextItem() {\n if (!this._focusedItem) {\n this._focusItem(this._data[0]);\n return;\n }\n\n const {path, open} = this._focusedItem;\n\n if (\n open &&\n Array.isArray(this._focusedItem.subItems) &&\n this._focusedItem.subItems.length > 0\n ) {\n this._focusItem(this._focusedItem.subItems[0]);\n return;\n }\n\n const nextPath = [...(path as number[])];\n nextPath[nextPath.length - 1] += 1;\n\n let nextFocusedItem = this._getItemByPath(nextPath);\n\n if (nextFocusedItem) {\n this._focusItem(nextFocusedItem);\n } else {\n nextPath.pop();\n\n if (nextPath.length > 0) {\n nextPath[nextPath.length - 1] += 1;\n nextFocusedItem = this._getItemByPath(nextPath);\n\n if (nextFocusedItem) {\n this._focusItem(nextFocusedItem);\n }\n }\n }\n }\n\n private _handleClick(event: MouseEvent) {\n const composedPath = event.composedPath();\n const targetElement = composedPath.find(\n (el: EventTarget) =>\n (el as HTMLElement).tagName &&\n (el as HTMLElement).tagName.toUpperCase() === 'LI'\n );\n\n if (targetElement) {\n const pathStr = (targetElement as HTMLLIElement).dataset.path || '';\n const path = pathStr.split('/').map((el) => Number(el));\n const item = this._getItemByPath(path) as TreeItem;\n\n this._selectItem(item);\n } else {\n if (this._focusedItem) {\n this._focusedItem.focused = false;\n }\n\n this._focusedItem = null;\n }\n }\n\n private _handleComponentKeyDown(ev: KeyboardEvent) {\n const keys: ListenedKey[] = [\n ' ',\n 'ArrowDown',\n 'ArrowUp',\n 'Enter',\n 'Escape',\n ];\n const key = ev.key as ListenedKey;\n\n if (keys.includes(ev.key as ListenedKey)) {\n ev.stopPropagation();\n ev.preventDefault();\n }\n\n if (key === 'Escape') {\n this._focusedItem = null;\n }\n\n if (key === 'ArrowUp') {\n this._focusPrevItem();\n }\n\n if (key === 'ArrowDown') {\n this._focusNextItem();\n }\n\n if (key === 'Enter' || key === ' ') {\n if (this._focusedItem) {\n this._selectItem(this._focusedItem);\n }\n }\n }\n\n private _handleComponentKeyDownBound =\n this._handleComponentKeyDown.bind(this);\n\n render(): TemplateResult {\n const classes = classMap({\n multi: this.multiline,\n single: !this.multiline,\n wrapper: true,\n 'has-not-focused-item': !this._focusedItem,\n 'selection-none': !this._selectedItem,\n 'selection-single': this._selectedItem !== null,\n });\n\n return html`\n <div @click=\"${this._handleClick}\" class=\"${classes}\">\n <ul>\n ${this._renderTree(this._data)}\n </ul>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-tree': VscodeTree;\n }\n\n interface GlobalEventHandlersEventMap {\n 'vsc-tree-select': CustomEvent;\n 'vsc-tree-action': VscTreeActionEvent;\n }\n}\n"]}
1
+ {"version":3,"file":"vscode-tree.js","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, nothing, TemplateResult} from 'lit';\nimport {customElement, property, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport {VscElement} from '../includes/VscElement.js';\nimport '../vscode-badge/index.js';\nimport '../vscode-icon/index.js';\nimport {VscodeIcon} from '../vscode-icon/index.js';\nimport styles from './vscode-tree.styles.js';\n\nexport type VscTreeActionEvent = CustomEvent<{\n actionId: string;\n item: TreeItem | null;\n value: string;\n}>;\n\nexport type VscTreeSelectEvent = CustomEvent<{\n icons: {\n branch?: string;\n open?: string;\n leaf?: string;\n };\n itemType: 'branch' | 'leaf';\n label: string;\n open: boolean;\n value: string;\n path: string;\n}>;\n\ntype ListenedKey = 'ArrowDown' | 'ArrowUp' | 'Enter' | 'Escape' | ' ';\n\ntype IconType = 'themeicon' | 'image';\n\ntype IconVariant = 'branch' | 'leaf' | 'open';\n\nexport interface TreeItemIconConfig {\n branch?: string;\n open?: string;\n leaf?: string;\n}\n\n/** Action icon configuration. */\nexport interface TreeItemAction {\n /** A unique name that identifies the clicked action item. */\n actionId: string;\n /** A Codicon name. */\n icon: string;\n /** Text description of the action. */\n tooltip?: string;\n}\n\n/**\n * The decoration is additional content on the right side of the tree item. It can be a short text,\n * a counter, or a small, filled circle. A color can be defined for the different states. If\n * multiple states are applied to the item, the color with higher precedence will be used. The color\n * precedence from higher to lower is selected, focused, hover, normal. Colors will not be applied\n * to the counter badge.\n */\nexport interface TreeItemDecoration {\n /** Text content of the decoration. If the appearance is `filled-circle`, it will be ignored. */\n content?: string;\n /** Appearance of the decoration. */\n appearance?: 'text' | 'counter-badge' | 'filled-circle';\n /**\n * When is decoration visible?\n * - `active`: visible when the tree item is focused, selected or hovered\n * - `normal`: visible when there is not any interaction on the tree item\n * - `always`: always visible\n */\n visibleWhen?: 'active' | 'normal' | 'always';\n /** A valid CSS property value to define a default color. */\n color?: string;\n /** A valid CSS property value to define the color for the mouse over state. */\n hoverColor?: string;\n /** A valid CSS property value to define the color for the focused state. */\n focusedColor?: string;\n /** A valid CSS property value to define the color for the selected state. */\n selectedColor?: string;\n}\n\nexport interface TreeItem {\n label: string;\n description?: string;\n subItems?: TreeItem[];\n actions?: TreeItemAction[];\n open?: boolean;\n selected?: boolean;\n focused?: boolean;\n hasSelectedItem?: boolean;\n hasFocusedItem?: boolean;\n icons?: TreeItemIconConfig | boolean;\n iconUrls?: TreeItemIconConfig;\n value?: string;\n path?: number[];\n decorations?: TreeItemDecoration[];\n}\n\ntype ItemType = 'branch' | 'leaf';\n\n/** Event payload of the `vsc-select` event. */\ninterface SelectEventDetail {\n /** Icon configuration of the clicked item */\n icons: TreeItemIconConfig | undefined | boolean;\n /** Is item type branch or leaf. */\n itemType: ItemType;\n /** The visible label of the item. */\n label: string;\n /** The value associated to the item. */\n value: string;\n /** Is the item opened if it's a branch. */\n open: boolean;\n /** Path represents the item place in the tree. For example 1/2/3 means:\n * `data[1].subItems[2].subItems[3]` */\n path: string; // ex.: 0/0/1\n}\n\nconst ARROW_OUTER_WIDTH = 30;\nconst ARROW_ICON_WIDTH = 16;\nconst CONTENT_PADDING = 3;\n\nconst addPath = (tree: TreeItem[], prevPath: number[] = []): TreeItem[] => {\n const nextTree: TreeItem[] = [];\n\n tree.forEach((item, index) => {\n const path = [...prevPath, index];\n const nextItem: TreeItem = {\n ...item,\n path,\n };\n\n if (item.subItems) {\n nextItem.subItems = addPath(item.subItems, path);\n }\n\n nextTree.push(nextItem);\n });\n\n return nextTree;\n};\n\nconst isBranch = (item: TreeItem) => {\n if (\n item.subItems &&\n Array.isArray(item.subItems) &&\n item?.subItems?.length > 0\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * @fires vsc-select Dispatched when an item is selected.\n * @fires {CustomEvent} vsc-tree-select Dispatched when an item is selected.\n * @fires vsc-run-action Dispatched when an action icon is clicked.\n * @fires {VscTreeActionEvent} vsc-tree-action Dispatched when an action icon is clicked.\n *\n * @cssprop --vscode-focusBorder\n * @cssprop --vscode-font-family\n * @cssprop --vscode-font-size\n * @cssprop --vscode-font-weight\n * @cssprop --vscode-list-hoverForeground\n * @cssprop --vscode-list-hoverBackground\n * @cssprop --vscode-list-inactiveSelectionBackground\n * @cssprop --vscode-list-inactiveSelectionForeground\n * @cssprop --vscode-list-activeSelectionBackground\n * @cssprop --vscode-list-activeSelectionForeground\n * @cssprop --vscode-list-inactiveSelectionIconForeground\n * @cssprop --vscode-list-inactiveFocusBackground\n * @cssprop --vscode-list-inactiveFocusOutline\n * @cssprop --vscode-list-focusOutline\n * @cssprop --vscode-tree-inactiveIndentGuidesStroke\n * @cssprop --vscode-tree-indentGuidesStroke\n */\n@customElement('vscode-tree')\nexport class VscodeTree extends VscElement {\n static styles = styles;\n\n @property({type: Array, reflect: false})\n set data(val: TreeItem[]) {\n const oldVal = this._data;\n\n this._data = addPath(val);\n this.requestUpdate('data', oldVal);\n }\n get data(): TreeItem[] {\n return this._data;\n }\n\n @property({type: Number})\n indent = 8;\n\n @property({type: Boolean, reflect: true})\n arrows = false;\n\n @property({type: Boolean, reflect: true})\n multiline = false;\n\n @property({type: Number, reflect: true})\n tabindex = 0;\n\n @property({type: Boolean, reflect: true, attribute: 'indent-guides'})\n indentGuides = false;\n\n private _data: TreeItem[] = [];\n\n @state()\n private _selectedItem: TreeItem | null = null;\n\n @state()\n private _focusedItem: TreeItem | null = null;\n\n @state()\n private _selectedBranch: TreeItem | null = null;\n\n @state()\n private _focusedBranch: TreeItem | null = null;\n\n /**\n * Closes all opened tree items recursively.\n */\n public closeAll(): void {\n this._closeSubTreeRecursively(this.data);\n this.requestUpdate();\n }\n\n /**\n * Deselects all selected items.\n */\n public deselectAll() {\n this._deselectItemsRecursively(this.data);\n this.requestUpdate();\n }\n\n /**\n * Returns a reference to a TreeItem object by path.\n * @param path\n * @returns\n */\n public getItemByPath(path: number[]): TreeItem | null {\n return this._getItemByPath(path);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('keydown', this._handleComponentKeyDownBound);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleComponentKeyDownBound);\n }\n\n private _getItemByPath(path: number[]): TreeItem | null {\n let current: TreeItem[] = this._data;\n let item: TreeItem | null = null;\n\n path.forEach((el, i) => {\n if (i === path.length - 1) {\n item = current[el];\n } else {\n current = current[el].subItems as TreeItem[];\n }\n });\n\n return item;\n }\n\n private _handleActionClick(ev: MouseEvent) {\n ev.stopPropagation();\n\n const el = ev.target as VscodeIcon;\n const itemPath = el.dataset.itemPath;\n const actionIndex = el.dataset.index;\n let item: TreeItem | null = null;\n let actionId = '';\n let value = '';\n\n if (itemPath) {\n const path = itemPath.split('/').map((p) => Number(p));\n item = this._getItemByPath(path);\n\n if (item?.actions) {\n const index = Number(actionIndex);\n\n if (item.actions[index]) {\n actionId = item.actions[index].actionId;\n }\n }\n\n if (item?.value) {\n value = item.value;\n }\n }\n\n /** @deprecated Renamed to `vsc-tree-action` */\n this.dispatchEvent(\n new CustomEvent<{actionId: string; item: TreeItem | null; value: string}>(\n 'vsc-run-action',\n {\n detail: {\n actionId,\n item,\n value,\n },\n }\n )\n );\n\n /**\n * Dispatched when an action icon is clicked.\n */\n this.dispatchEvent(\n new CustomEvent<{actionId: string; item: TreeItem | null; value: string}>(\n 'vsc-tree-action',\n {\n detail: {\n actionId,\n item,\n value,\n },\n }\n ) as VscTreeActionEvent\n );\n }\n\n private _renderIconVariant(variant: {value: string; type: IconType}) {\n const {type, value} = variant;\n\n if (type === 'themeicon') {\n return html`<vscode-icon name=${value} class=\"theme-icon\"></vscode-icon>`;\n } else {\n return html`<span\n class=\"image-icon\"\n style=\"background-image: url(${value});\"\n ></span>`;\n }\n }\n\n private _renderIcon(item: TreeItem): TemplateResult {\n const iconVariants: Record<IconVariant, {value: string; type: IconType}> = {\n branch: {\n value: 'folder',\n type: 'themeicon',\n },\n open: {\n value: 'folder-opened',\n type: 'themeicon',\n },\n leaf: {\n value: 'file',\n type: 'themeicon',\n },\n };\n\n if (item.iconUrls) {\n if (item.iconUrls.branch) {\n iconVariants.branch = {\n value: item.iconUrls.branch,\n type: 'image',\n };\n }\n\n if (item.iconUrls.leaf) {\n iconVariants.leaf = {\n value: item.iconUrls.leaf,\n type: 'image',\n };\n }\n\n if (item.iconUrls.open) {\n iconVariants.open = {\n value: item.iconUrls.open,\n type: 'image',\n };\n }\n } else if (typeof item.icons === 'object') {\n if (item.icons.branch) {\n iconVariants.branch = {\n value: item.icons.branch,\n type: 'themeicon',\n };\n }\n\n if (item.icons.leaf) {\n iconVariants.leaf = {\n value: item.icons.leaf,\n type: 'themeicon',\n };\n }\n\n if (item.icons.open) {\n iconVariants.open = {\n value: item.icons.open,\n type: 'themeicon',\n };\n }\n } else if (!item.icons) {\n return html`${nothing}`;\n }\n\n if (isBranch(item)) {\n if (item.open) {\n return this._renderIconVariant(iconVariants.open);\n } else {\n return this._renderIconVariant(iconVariants.branch);\n }\n } else {\n return this._renderIconVariant(iconVariants.leaf);\n }\n }\n\n private _renderArrow(item: TreeItem): TemplateResult {\n if (!this.arrows || !isBranch(item)) {\n return html`${nothing}`;\n }\n\n const {open = false} = item;\n const arrowIconName = open ? 'chevron-down' : 'chevron-right';\n\n return html`\n <div class=\"arrow-container\">\n <vscode-icon name=\"${arrowIconName}\" class=\"icon-arrow\"></vscode-icon>\n </div>\n `;\n }\n\n private _renderActions(item: TreeItem): TemplateResult {\n const actionButtons: TemplateResult[] = [];\n\n if (item.actions && Array.isArray(item.actions)) {\n item.actions.forEach((action, index) => {\n if (action.icon) {\n const icon = html`<vscode-icon\n name=${action.icon}\n action-icon\n title=${ifDefined(action.tooltip)}\n data-item-path=${ifDefined(item.path?.join('/'))}\n data-index=${index}\n class=\"action-icon\"\n @click=${this._handleActionClick}\n ></vscode-icon>`;\n\n actionButtons.push(icon);\n }\n });\n }\n\n if (actionButtons.length > 0) {\n return html`<div class=\"actions\">${actionButtons}</div>`;\n } else {\n return html`${nothing}`;\n }\n }\n\n private _renderDecorations(item: TreeItem) {\n const decorations: TemplateResult[] = [];\n\n if (item.decorations && Array.isArray(item.decorations)) {\n item.decorations.forEach((decoration) => {\n const {\n appearance = 'text',\n visibleWhen = 'always',\n content = '',\n color = '',\n focusedColor = '',\n hoverColor = '',\n selectedColor = '',\n } = decoration;\n const visibleWhenClass = `visible-when-${visibleWhen}`;\n const inlineStyles: {[key: string]: string} = {};\n\n if (color) {\n inlineStyles['--color'] = color;\n }\n\n if (focusedColor) {\n inlineStyles['--focused-color'] = focusedColor;\n }\n\n if (hoverColor) {\n inlineStyles['--hover-color'] = hoverColor;\n }\n\n if (selectedColor) {\n inlineStyles['--selected-color'] = selectedColor;\n }\n\n switch (appearance) {\n case 'counter-badge':\n decorations.push(\n html`<vscode-badge\n variant=\"counter\"\n class=${['counter-badge', visibleWhenClass].join(' ')}\n >${content}</vscode-badge\n >`\n );\n break;\n case 'filled-circle':\n decorations.push(\n html`<vscode-icon\n name=\"circle-filled\"\n size=\"14\"\n class=${['filled-circle', visibleWhenClass].join(' ')}\n style=${styleMap(inlineStyles)}\n ></vscode-icon>`\n );\n break;\n case 'text':\n decorations.push(\n html`<div\n class=${['decoration-text', visibleWhenClass].join(' ')}\n style=${styleMap(inlineStyles)}\n >\n ${content}\n </div>`\n );\n break;\n default:\n }\n });\n }\n\n if (decorations.length > 0) {\n return html`<div class=\"decorations\">${decorations}</div>`;\n } else {\n return html`${nothing}`;\n }\n }\n\n private _renderTreeItem(\n item: TreeItem,\n additionalOptions: {\n path: number[];\n itemType: ItemType;\n hasFocusedItem: boolean;\n hasSelectedItem: boolean;\n }\n ) {\n const {\n open = false,\n label,\n description = '',\n selected = false,\n focused = false,\n subItems = [],\n } = item;\n const {\n path,\n itemType,\n hasFocusedItem = false,\n hasSelectedItem = false,\n } = additionalOptions;\n const indentLevel = path.length - 1;\n const contentsClasses = ['contents'];\n const liClasses = open ? ['open'] : [];\n const indentSize = indentLevel * this.indent;\n const padLeft =\n this.arrows && itemType === 'leaf'\n ? ARROW_OUTER_WIDTH + indentSize\n : indentSize;\n const arrowMarkup = this._renderArrow(item);\n const iconMarkup = this._renderIcon(item);\n const indentGuidePos = this.arrows\n ? indentSize + ARROW_ICON_WIDTH\n : indentSize + CONTENT_PADDING;\n const subTreeMarkup =\n open && itemType === 'branch'\n ? html`<ul\n style=${styleMap({'--indent-guide-pos': `${indentGuidePos}px`})}\n class=${classMap({\n 'has-active-item': hasFocusedItem || hasSelectedItem,\n })}\n >\n ${this._renderTree(subItems, path)}\n </ul>`\n : nothing;\n const descriptionMarkup = description\n ? html`<span class=\"description\">${description}</span>`\n : nothing;\n const actionsMarkup = this._renderActions(item);\n const decorationsMarkup = this._renderDecorations(item);\n\n liClasses.push(itemType);\n\n if (selected) {\n contentsClasses.push('selected');\n }\n\n if (focused) {\n contentsClasses.push('focused');\n }\n\n return html`\n <li data-path=\"${path.join('/')}\" class=\"${liClasses.join(' ')}\">\n <div\n class=\"${contentsClasses.join(' ')}\"\n style=\"${styleMap({paddingLeft: `${padLeft + CONTENT_PADDING}px`})}\"\n >\n ${arrowMarkup}${iconMarkup}<span class=\"text-content\"\n >${label}${descriptionMarkup}</span\n >\n ${actionsMarkup} ${decorationsMarkup}\n </div>\n ${subTreeMarkup}\n </li>\n `;\n }\n\n private _renderTree(tree: TreeItem[], oldPath: number[] = []) {\n const ret: TemplateResult[] = [];\n\n if (!tree) {\n return nothing;\n }\n\n tree.forEach((item, index) => {\n const path = [...oldPath, index];\n const itemType = isBranch(item) ? 'branch' : 'leaf';\n const {\n selected = false,\n focused = false,\n hasFocusedItem = false,\n hasSelectedItem = false,\n } = item;\n\n if (selected) {\n this._selectedItem = item;\n }\n\n if (focused) {\n this._focusedItem = item;\n }\n\n ret.push(\n this._renderTreeItem(item, {\n path,\n itemType,\n hasFocusedItem,\n hasSelectedItem,\n })\n );\n });\n\n return ret;\n }\n\n private _selectItem(item: TreeItem) {\n if (this._selectedItem) {\n this._selectedItem.selected = false;\n }\n\n if (this._focusedItem) {\n this._focusedItem.focused = false;\n }\n\n this._selectedItem = item;\n item.selected = true;\n this._focusedItem = item;\n item.focused = true;\n\n if (this._selectedBranch) {\n this._selectedBranch.hasSelectedItem = false;\n }\n\n let parentBranch: TreeItem | null = null;\n\n if (item.path?.length && item.path.length > 1) {\n parentBranch = this._getItemByPath(item.path.slice(0, -1));\n }\n\n if (isBranch(item)) {\n this._selectedBranch = item;\n item.hasSelectedItem = true;\n item.open = !item.open;\n\n if (!item.open) {\n if (parentBranch) {\n this._selectedBranch = parentBranch;\n parentBranch.hasSelectedItem = true;\n }\n } else {\n this._selectedBranch = item;\n item.hasSelectedItem = true;\n }\n } else {\n if (item.path?.length && item.path.length > 1) {\n const parentBranch = this._getItemByPath(item.path.slice(0, -1));\n\n if (parentBranch) {\n this._selectedBranch = parentBranch;\n parentBranch.hasSelectedItem = true;\n }\n } else {\n this._selectedBranch = item;\n item.hasSelectedItem = true;\n }\n }\n\n this._emitSelectEvent(\n this._selectedItem as TreeItem,\n this._selectedItem.path!.join('/')\n );\n\n this.requestUpdate();\n }\n\n private _focusItem(item: TreeItem) {\n if (this._focusedItem) {\n this._focusedItem.focused = false;\n }\n\n this._focusedItem = item;\n item.focused = true;\n\n const isBranch = !!item?.subItems?.length;\n\n if (this._focusedBranch) {\n this._focusedBranch.hasFocusedItem = false;\n }\n\n let parentBranch: TreeItem | null = null;\n\n if (item.path?.length && item.path.length > 1) {\n parentBranch = this._getItemByPath(item.path.slice(0, -1));\n }\n\n if (!isBranch) {\n if (parentBranch) {\n this._focusedBranch = parentBranch;\n parentBranch.hasFocusedItem = true;\n }\n } else {\n if (item.open) {\n this._focusedBranch = item;\n item.hasFocusedItem = true;\n } else if (!item.open && parentBranch) {\n this._focusedBranch = parentBranch;\n parentBranch.hasFocusedItem = true;\n }\n }\n }\n\n private _closeSubTreeRecursively(tree: TreeItem[]) {\n tree.forEach((item) => {\n item.open = false;\n\n if (item.subItems && item.subItems.length > 0) {\n this._closeSubTreeRecursively(item.subItems);\n }\n });\n }\n\n private _deselectItemsRecursively(tree: TreeItem[]) {\n tree.forEach((item) => {\n if (item.selected) {\n item.selected = false;\n }\n\n if (item.subItems && item.subItems.length > 0) {\n this._deselectItemsRecursively(item.subItems);\n }\n });\n }\n\n private _emitSelectEvent(item: TreeItem, path: string) {\n const {icons, label, open, value} = item;\n const detail = {\n icons,\n itemType: isBranch(item) ? 'branch' : ('leaf' as ItemType),\n label,\n open: open || false,\n value: value || label,\n path,\n };\n\n /** @deprecated Renamed to `vsc-tree-select` */\n this.dispatchEvent(\n new CustomEvent<SelectEventDetail>('vsc-select', {\n bubbles: true,\n composed: true,\n detail,\n })\n );\n\n this.dispatchEvent(\n new CustomEvent('vsc-tree-select', {\n detail,\n }) as VscTreeSelectEvent\n );\n }\n\n private _focusPrevItem() {\n if (!this._focusedItem) {\n this._focusItem(this._data[0]);\n return;\n }\n\n const {path} = this._focusedItem;\n\n if (path && path?.length > 0) {\n const currentItemIndex = path[path.length - 1];\n const hasParent = path!.length > 1;\n\n if (currentItemIndex > 0) {\n const newPath = [...path];\n newPath[newPath.length - 1] = currentItemIndex - 1;\n\n const prevSibling = this._getItemByPath(newPath) as TreeItem;\n let newFocusedItem = prevSibling;\n\n if (prevSibling?.open && prevSibling.subItems?.length) {\n const {subItems} = prevSibling;\n newFocusedItem = subItems[subItems.length - 1];\n }\n\n this._focusItem(newFocusedItem);\n } else {\n if (hasParent) {\n const newPath = [...path];\n newPath.pop();\n\n this._focusItem(this._getItemByPath(newPath) as TreeItem);\n }\n }\n } else {\n this._focusItem(this._data[0]);\n }\n }\n\n private _focusNextItem() {\n if (!this._focusedItem) {\n this._focusItem(this._data[0]);\n return;\n }\n\n const {path, open} = this._focusedItem;\n\n if (\n open &&\n Array.isArray(this._focusedItem.subItems) &&\n this._focusedItem.subItems.length > 0\n ) {\n this._focusItem(this._focusedItem.subItems[0]);\n return;\n }\n\n const nextPath = [...(path as number[])];\n nextPath[nextPath.length - 1] += 1;\n\n let nextFocusedItem = this._getItemByPath(nextPath);\n\n if (nextFocusedItem) {\n this._focusItem(nextFocusedItem);\n } else {\n nextPath.pop();\n\n if (nextPath.length > 0) {\n nextPath[nextPath.length - 1] += 1;\n nextFocusedItem = this._getItemByPath(nextPath);\n\n if (nextFocusedItem) {\n this._focusItem(nextFocusedItem);\n }\n }\n }\n }\n\n private _handleClick(event: MouseEvent) {\n const composedPath = event.composedPath();\n const targetElement = composedPath.find(\n (el: EventTarget) =>\n (el as HTMLElement).tagName &&\n (el as HTMLElement).tagName.toUpperCase() === 'LI'\n );\n\n if (targetElement) {\n const pathStr = (targetElement as HTMLLIElement).dataset.path || '';\n const path = pathStr.split('/').map((el) => Number(el));\n const item = this._getItemByPath(path) as TreeItem;\n\n this._selectItem(item);\n } else {\n if (this._focusedItem) {\n this._focusedItem.focused = false;\n }\n\n this._focusedItem = null;\n }\n }\n\n private _handleComponentKeyDown(ev: KeyboardEvent) {\n const keys: ListenedKey[] = [\n ' ',\n 'ArrowDown',\n 'ArrowUp',\n 'Enter',\n 'Escape',\n ];\n const key = ev.key as ListenedKey;\n\n if (keys.includes(ev.key as ListenedKey)) {\n ev.stopPropagation();\n ev.preventDefault();\n }\n\n if (key === 'Escape') {\n this._focusedItem = null;\n }\n\n if (key === 'ArrowUp') {\n this._focusPrevItem();\n }\n\n if (key === 'ArrowDown') {\n this._focusNextItem();\n }\n\n if (key === 'Enter' || key === ' ') {\n if (this._focusedItem) {\n this._selectItem(this._focusedItem);\n }\n }\n }\n\n private _handleComponentKeyDownBound =\n this._handleComponentKeyDown.bind(this);\n\n render(): TemplateResult {\n const classes = classMap({\n multi: this.multiline,\n single: !this.multiline,\n wrapper: true,\n 'has-not-focused-item': !this._focusedItem,\n 'selection-none': !this._selectedItem,\n 'selection-single': this._selectedItem !== null,\n });\n\n return html`\n <div @click=\"${this._handleClick}\" class=\"${classes}\">\n <ul>\n ${this._renderTree(this._data)}\n </ul>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-tree': VscodeTree;\n }\n\n interface GlobalEventHandlersEventMap {\n 'vsc-tree-select': VscTreeSelectEvent;\n 'vsc-tree-action': VscTreeActionEvent;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vscode-elements/elements",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Webcomponents for creating Visual Studio Code extensions",
5
5
  "main": "dist/main.js",
6
6
  "module": "dist/main.js",
@@ -137,11 +137,9 @@
137
137
  },
138
138
  "homepage": "https://bendera.github.io/vscode-webview-elements",
139
139
  "dependencies": {
140
- "lit": "^3.1.0"
140
+ "lit": "^3.1.2"
141
141
  },
142
142
  "devDependencies": {
143
- "@11ty/eleventy": "^2.0.1",
144
- "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
145
143
  "@custom-elements-manifest/analyzer": "^0.9.0",
146
144
  "@esm-bundle/chai": "^4.3.4-fix.0",
147
145
  "@open-wc/testing": "^4.0.0",
@@ -151,12 +149,12 @@
151
149
  "@rollup/plugin-terser": "^0.4.4",
152
150
  "@types/chai": "^4.3.11",
153
151
  "@types/mocha": "^10.0.6",
154
- "@types/node": "^20.10.6",
155
- "@typescript-eslint/eslint-plugin": "^6.16.0",
156
- "@typescript-eslint/parser": "^6.16.0",
152
+ "@types/node": "^20.11.17",
153
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
154
+ "@typescript-eslint/parser": "^6.21.0",
157
155
  "@vscode/codicons": "^0.0.35",
158
- "@web/dev-server": "^0.4.1",
159
- "@web/dev-server-esbuild": "^1.0.1",
156
+ "@web/dev-server": "^0.4.2",
157
+ "@web/dev-server-esbuild": "^1.0.2",
160
158
  "@web/dev-server-legacy": "^2.1.0",
161
159
  "@web/dev-server-rollup": "^0.6.1",
162
160
  "@web/test-runner": "^0.18.0",
@@ -164,23 +162,24 @@
164
162
  "@web/test-runner-mocha": "^0.9.0",
165
163
  "@web/test-runner-playwright": "^0.11.0",
166
164
  "@webcomponents/webcomponentsjs": "^2.8.0",
165
+ "chokidar": "^3.6.0",
167
166
  "concurrently": "^8.2.2",
168
167
  "cross-env": "^7.0.3",
169
- "custom-element-vs-code-integration": "^1.2.1",
168
+ "custom-element-vs-code-integration": "^1.2.2",
170
169
  "deepmerge": "^4.3.1",
171
- "dotenv": "^16.3.1",
170
+ "dotenv": "^16.4.2",
172
171
  "eslint": "^8.56.0",
173
- "lit-analyzer": "^2.0.2",
174
- "mocha": "^10.2.0",
175
- "prettier": "^3.1.1",
172
+ "lit-analyzer": "^2.0.3",
173
+ "mocha": "^10.3.0",
174
+ "prettier": "^3.2.5",
176
175
  "rimraf": "^5.0.5",
177
- "rollup": "^4.9.2",
176
+ "rollup": "^4.10.0",
178
177
  "rollup-plugin-filesize": "^10.0.0",
179
178
  "rollup-plugin-minify-html-literals-v3": "^1.3.4",
180
179
  "rollup-plugin-visualizer": "^5.12.0",
181
- "semver": "^7.5.4",
180
+ "semver": "^7.6.0",
182
181
  "sinon": "^17.0.1",
183
182
  "typescript": "^5.3.3",
184
- "wireit": "^0.14.1"
183
+ "wireit": "^0.14.4"
185
184
  }
186
185
  }
@@ -522,7 +522,7 @@
522
522
  },
523
523
  {
524
524
  "name": "vscode-tree",
525
- "description": "\n---\n\n\n### **Events:**\n - **vsc-run-action** - Dispatched when an action icon is clicked.\n- **vsc-select** - Dispatched when an item is selected.\n- **vsc-tree-select** - Dispatched when an item is selected.\n- **vsc-tree-action** - Dispatched when an action icon is clicked.\n\n### **CSS Properties:**\n - **--vscode-focusBorder** - undefined _(default: undefined)_\n- **--vscode-font-family** - undefined _(default: undefined)_\n- **--vscode-font-size** - undefined _(default: undefined)_\n- **--vscode-font-weight** - undefined _(default: undefined)_\n- **--vscode-list-hoverForeground** - undefined _(default: undefined)_\n- **--vscode-list-hoverBackground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveSelectionBackground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveSelectionForeground** - undefined _(default: undefined)_\n- **--vscode-list-activeSelectionBackground** - undefined _(default: undefined)_\n- **--vscode-list-activeSelectionForeground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveSelectionIconForeground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveFocusBackground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveFocusOutline** - undefined _(default: undefined)_\n- **--vscode-list-focusOutline** - undefined _(default: undefined)_\n- **--vscode-tree-inactiveIndentGuidesStroke** - undefined _(default: undefined)_\n- **--vscode-tree-indentGuidesStroke** - undefined _(default: undefined)_",
525
+ "description": "\n---\n\n\n### **Events:**\n - **vsc-run-action** - Dispatched when an action icon is clicked.\n- **vsc-select** - Dispatched when an item is selected.\n- **vsc-tree-select** - Dispatched when an item is selected.\n- **vsc-tree-action** - Dispatched when an action icon is clicked.\n\n### **Methods:**\n - **closeAll(): _void_** - Closes all opened tree items recursively.\n- **deselectAll()** - Deselects all selected items.\n- **getItemByPath(path: _number[]_): __** - Returns a reference to a TreeItem object by path.\n\n### **CSS Properties:**\n - **--vscode-focusBorder** - undefined _(default: undefined)_\n- **--vscode-font-family** - undefined _(default: undefined)_\n- **--vscode-font-size** - undefined _(default: undefined)_\n- **--vscode-font-weight** - undefined _(default: undefined)_\n- **--vscode-list-hoverForeground** - undefined _(default: undefined)_\n- **--vscode-list-hoverBackground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveSelectionBackground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveSelectionForeground** - undefined _(default: undefined)_\n- **--vscode-list-activeSelectionBackground** - undefined _(default: undefined)_\n- **--vscode-list-activeSelectionForeground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveSelectionIconForeground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveFocusBackground** - undefined _(default: undefined)_\n- **--vscode-list-inactiveFocusOutline** - undefined _(default: undefined)_\n- **--vscode-list-focusOutline** - undefined _(default: undefined)_\n- **--vscode-tree-inactiveIndentGuidesStroke** - undefined _(default: undefined)_\n- **--vscode-tree-indentGuidesStroke** - undefined _(default: undefined)_",
526
526
  "attributes": [
527
527
  { "name": "data", "values": [{ "name": "TreeItem[]" }] },
528
528
  { "name": "indent", "values": [] },