@vscode-elements/elements 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +55 -34
- package/dist/bundled.js +1 -1
- package/dist/includes/VscElement.js +1 -1
- package/dist/includes/VscElement.js.map +1 -1
- package/dist/vscode-tree/vscode-tree.d.ts +8 -0
- package/dist/vscode-tree/vscode-tree.d.ts.map +1 -1
- package/dist/vscode-tree/vscode-tree.js +19 -4
- package/dist/vscode-tree/vscode-tree.js.map +1 -1
- package/package.json +1 -1
- package/vscode.css-custom-data.json +8 -1
- package/vscode.html-custom-data.json +1 -1
|
@@ -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.
|
|
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.3.0';\n\n /** VSC Element version */\n get version() {\n return this._version;\n }\n}\n"]}
|
|
@@ -64,6 +64,7 @@ export interface TreeItemDecoration {
|
|
|
64
64
|
export interface TreeItem {
|
|
65
65
|
label: string;
|
|
66
66
|
description?: string;
|
|
67
|
+
tooltip?: string;
|
|
67
68
|
subItems?: TreeItem[];
|
|
68
69
|
actions?: TreeItemAction[];
|
|
69
70
|
open?: boolean;
|
|
@@ -99,6 +100,13 @@ export interface TreeItem {
|
|
|
99
100
|
* @cssprop --vscode-list-focusOutline
|
|
100
101
|
* @cssprop --vscode-tree-inactiveIndentGuidesStroke
|
|
101
102
|
* @cssprop --vscode-tree-indentGuidesStroke
|
|
103
|
+
*
|
|
104
|
+
* @csspart text-content
|
|
105
|
+
* @csspart description
|
|
106
|
+
* @csspart counter-badge-decoration
|
|
107
|
+
* @csspart filled-circle-decoration
|
|
108
|
+
* @csspart caption-decoration
|
|
109
|
+
* @csspart decorations Container of decorations
|
|
102
110
|
*/
|
|
103
111
|
export declare class VscodeTree extends VscElement {
|
|
104
112
|
static styles: import("lit").CSSResultGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-tree.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAC,MAAM,KAAK,CAAC;AAKlD,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAC;AACrD,OAAO,0BAA0B,CAAC;AAClC,OAAO,yBAAyB,CAAC;AAIjC,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;IAC3C,KAAK,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAQH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,eAAe,CAAC;IACxD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7C,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAyDD
|
|
1
|
+
{"version":3,"file":"vscode-tree.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,13 @@ const isBranch = (item) => {
|
|
|
61
61
|
* @cssprop --vscode-list-focusOutline
|
|
62
62
|
* @cssprop --vscode-tree-inactiveIndentGuidesStroke
|
|
63
63
|
* @cssprop --vscode-tree-indentGuidesStroke
|
|
64
|
+
*
|
|
65
|
+
* @csspart text-content
|
|
66
|
+
* @csspart description
|
|
67
|
+
* @csspart counter-badge-decoration
|
|
68
|
+
* @csspart filled-circle-decoration
|
|
69
|
+
* @csspart caption-decoration
|
|
70
|
+
* @csspart decorations Container of decorations
|
|
64
71
|
*/
|
|
65
72
|
let VscodeTree = class VscodeTree extends VscElement {
|
|
66
73
|
constructor() {
|
|
@@ -311,6 +318,7 @@ let VscodeTree = class VscodeTree extends VscElement {
|
|
|
311
318
|
decorations.push(html `<vscode-badge
|
|
312
319
|
variant="counter"
|
|
313
320
|
class=${['counter-badge', visibleWhenClass].join(' ')}
|
|
321
|
+
part="counter-badge-decoration"
|
|
314
322
|
>${content}</vscode-badge
|
|
315
323
|
>`);
|
|
316
324
|
break;
|
|
@@ -319,12 +327,14 @@ let VscodeTree = class VscodeTree extends VscElement {
|
|
|
319
327
|
name="circle-filled"
|
|
320
328
|
size="14"
|
|
321
329
|
class=${['filled-circle', visibleWhenClass].join(' ')}
|
|
330
|
+
part="filled-circle-decoration"
|
|
322
331
|
style=${styleMap(inlineStyles)}
|
|
323
332
|
></vscode-icon>`);
|
|
324
333
|
break;
|
|
325
334
|
case 'text':
|
|
326
335
|
decorations.push(html `<div
|
|
327
336
|
class=${['decoration-text', visibleWhenClass].join(' ')}
|
|
337
|
+
part="caption-decoration"
|
|
328
338
|
style=${styleMap(inlineStyles)}
|
|
329
339
|
>
|
|
330
340
|
${content}
|
|
@@ -335,14 +345,16 @@ let VscodeTree = class VscodeTree extends VscElement {
|
|
|
335
345
|
});
|
|
336
346
|
}
|
|
337
347
|
if (decorations.length > 0) {
|
|
338
|
-
return html `<div class="decorations"
|
|
348
|
+
return html `<div class="decorations" part="decorations">
|
|
349
|
+
${decorations}
|
|
350
|
+
</div>`;
|
|
339
351
|
}
|
|
340
352
|
else {
|
|
341
353
|
return html `${nothing}`;
|
|
342
354
|
}
|
|
343
355
|
}
|
|
344
356
|
_renderTreeItem(item, additionalOptions) {
|
|
345
|
-
const { open = false, label, description = '', selected = false, focused = false, subItems = [], } = item;
|
|
357
|
+
const { open = false, label, description = '', tooltip, selected = false, focused = false, subItems = [], } = item;
|
|
346
358
|
const { path, itemType, hasFocusedItem = false, hasSelectedItem = false, } = additionalOptions;
|
|
347
359
|
const indentLevel = path.length - 1;
|
|
348
360
|
const contentsClasses = ['contents'];
|
|
@@ -367,7 +379,7 @@ let VscodeTree = class VscodeTree extends VscElement {
|
|
|
367
379
|
</ul>`
|
|
368
380
|
: nothing;
|
|
369
381
|
const descriptionMarkup = description
|
|
370
|
-
? html `<span class="description">${description}</span>`
|
|
382
|
+
? html `<span class="description" part="description">${description}</span>`
|
|
371
383
|
: nothing;
|
|
372
384
|
const actionsMarkup = this._renderActions(item);
|
|
373
385
|
const decorationsMarkup = this._renderDecorations(item);
|
|
@@ -384,7 +396,10 @@ let VscodeTree = class VscodeTree extends VscElement {
|
|
|
384
396
|
class="${contentsClasses.join(' ')}"
|
|
385
397
|
style="${styleMap({ paddingLeft: `${padLeft + CONTENT_PADDING}px` })}"
|
|
386
398
|
>
|
|
387
|
-
${arrowMarkup}${iconMarkup}<span
|
|
399
|
+
${arrowMarkup}${iconMarkup}<span
|
|
400
|
+
class="text-content"
|
|
401
|
+
part="text-content"
|
|
402
|
+
title="${ifDefined(tooltip)}"
|
|
388
403
|
>${label}${descriptionMarkup}</span
|
|
389
404
|
>
|
|
390
405
|
${actionsMarkup} ${decorationsMarkup}
|
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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;AA6G7C,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;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;QA8sBvC,iCAA4B,GAClC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAoB5C,CAAC;IAxwBC,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+BD;;OAEG;IACI,QAAQ;QACb,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,IAAc;QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,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;;mBAElD,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;;wBAE7C,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;;wBAE/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;UACP,WAAW;aACR,CAAC;QACV,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,OAAO,EACP,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,gDAAgD,WAAW,SAAS;YAC1E,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;;;qBAGf,SAAS,CAAC,OAAO,CAAC;eACxB,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,yBAAyB,CAAC,IAAgB;QAChD,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,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,CAChB,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,MAAM;SACP,CAAuB,CACzB,CAAC;IACJ,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;;AA1wBM,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,CA4wBtB","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 tooltip?: 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 * @csspart text-content\n * @csspart description\n * @csspart counter-badge-decoration\n * @csspart filled-circle-decoration\n * @csspart caption-decoration\n * @csspart decorations Container of decorations\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 part=\"counter-badge-decoration\"\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 part=\"filled-circle-decoration\"\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 part=\"caption-decoration\"\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\" part=\"decorations\">\n ${decorations}\n </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 tooltip,\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\" part=\"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\n class=\"text-content\"\n part=\"text-content\"\n title=\"${ifDefined(tooltip)}\"\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
|
@@ -263,5 +263,12 @@
|
|
|
263
263
|
{ "name": "--vscode-tree-inactiveIndentGuidesStroke", "values": [] },
|
|
264
264
|
{ "name": "--vscode-tree-indentGuidesStroke", "values": [] }
|
|
265
265
|
],
|
|
266
|
-
"pseudoElements": [
|
|
266
|
+
"pseudoElements": [
|
|
267
|
+
{ "name": "::part(text-content)" },
|
|
268
|
+
{ "name": "::part(description)" },
|
|
269
|
+
{ "name": "::part(counter-badge-decoration)" },
|
|
270
|
+
{ "name": "::part(filled-circle-decoration)" },
|
|
271
|
+
{ "name": "::part(caption-decoration)" },
|
|
272
|
+
{ "name": "::part(decorations)", "description": "Container of decorations" }
|
|
273
|
+
]
|
|
267
274
|
}
|
|
@@ -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### **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)_",
|
|
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)_\n\n### **CSS Parts:**\n - **text-content** - undefined\n- **description** - undefined\n- **counter-badge-decoration** - undefined\n- **filled-circle-decoration** - undefined\n- **caption-decoration** - undefined\n- **decorations** - Container of decorations",
|
|
526
526
|
"attributes": [
|
|
527
527
|
{ "name": "data", "values": [{ "name": "TreeItem[]" }] },
|
|
528
528
|
{ "name": "indent", "values": [] },
|