@vscode-elements/elements 2.0.0-pre.2 → 2.0.0-pre.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
- const VERSION = '2.0.0-pre.2';
2
+ const VERSION = '2.0.0-pre.3';
3
3
  const CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';
4
4
  export class VscElement extends LitElement {
5
5
  /** VSCode Elements 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,GAAG,aAAa,CAAC;AAC9B,MAAM,UAAU,GAAG,2CAA2C,CAAC;AAE/D,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC,8BAA8B;IAC9B,IAAI,OAAO;QACT,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AASD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAC/C,OAAO,CAAC,aAAiC,EAAE,EAAE;QAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAyC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAI,EAAiB,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,OAAO,EACP,mEAAmE,CACpE,CAAC;YACF,OAAO;gBACL,mEAAmE,CAAC;QACxE,CAAC;aAAM,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO;gBACL,mEAAmE,CAAC;YACtE,OAAO,IAAI,oBAAoB,OAAO,8BAA8B,cAAc,IAAI,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,gEAAgE,CAAC;QACrE,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,qBAAqB,OAAO,IAAI,OAAO,0CAA0C,UAAU,UAAU,CACtG,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {LitElement} from 'lit';\n\nconst VERSION = '2.0.0-pre.2';\nconst CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';\n\nexport class VscElement extends LitElement {\n /** VSCode Elements version */\n get version(): string {\n return VERSION;\n }\n}\n\ntype CustomElementClass = Omit<typeof HTMLElement, 'new'>;\n\nexport type Constructor<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n};\n\n/**\n * Own implementation of Lit's customElement decorator.\n */\nexport const customElement = (tagName: string) => {\n return (classOrTarget: CustomElementClass) => {\n const customElementClass = customElements.get(tagName);\n\n if (!customElementClass) {\n customElements.define(tagName, classOrTarget as CustomElementConstructor);\n return;\n }\n\n if (CONFIG_KEY in window) {\n return;\n }\n\n const el = document.createElement(tagName);\n const anotherVersion = (el as VscElement)?.version;\n let message = '';\n\n if (!anotherVersion) {\n // eslint-disable-next-line no-console\n console.warn(\n tagName,\n 'is already registered by an unknown custom element handler class.'\n );\n message +=\n 'is already registered by an unknown custom element handler class.';\n } else if (anotherVersion !== VERSION) {\n message +=\n 'is already registered by a different version of VSCode Elements. ';\n message += `This version is \"${VERSION}\", while the other one is \"${anotherVersion}\".`;\n } else {\n message +=\n 'is already registered by the same version of VSCode Elements. ';\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n `[VSCode Elements] ${tagName} ${message}\\nTo suppress this warning, set window.${CONFIG_KEY} to true`\n );\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,GAAG,aAAa,CAAC;AAC9B,MAAM,UAAU,GAAG,2CAA2C,CAAC;AAE/D,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC,8BAA8B;IAC9B,IAAI,OAAO;QACT,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AASD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAC/C,OAAO,CAAC,aAAiC,EAAE,EAAE;QAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAyC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAI,EAAiB,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,OAAO,EACP,mEAAmE,CACpE,CAAC;YACF,OAAO;gBACL,mEAAmE,CAAC;QACxE,CAAC;aAAM,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO;gBACL,mEAAmE,CAAC;YACtE,OAAO,IAAI,oBAAoB,OAAO,8BAA8B,cAAc,IAAI,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,gEAAgE,CAAC;QACrE,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,qBAAqB,OAAO,IAAI,OAAO,0CAA0C,UAAU,UAAU,CACtG,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {LitElement} from 'lit';\n\nconst VERSION = '2.0.0-pre.3';\nconst CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';\n\nexport class VscElement extends LitElement {\n /** VSCode Elements version */\n get version(): string {\n return VERSION;\n }\n}\n\ntype CustomElementClass = Omit<typeof HTMLElement, 'new'>;\n\nexport type Constructor<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n};\n\n/**\n * Own implementation of Lit's customElement decorator.\n */\nexport const customElement = (tagName: string) => {\n return (classOrTarget: CustomElementClass) => {\n const customElementClass = customElements.get(tagName);\n\n if (!customElementClass) {\n customElements.define(tagName, classOrTarget as CustomElementConstructor);\n return;\n }\n\n if (CONFIG_KEY in window) {\n return;\n }\n\n const el = document.createElement(tagName);\n const anotherVersion = (el as VscElement)?.version;\n let message = '';\n\n if (!anotherVersion) {\n // eslint-disable-next-line no-console\n console.warn(\n tagName,\n 'is already registered by an unknown custom element handler class.'\n );\n message +=\n 'is already registered by an unknown custom element handler class.';\n } else if (anotherVersion !== VERSION) {\n message +=\n 'is already registered by a different version of VSCode Elements. ';\n message += `This version is \"${VERSION}\", while the other one is \"${anotherVersion}\".`;\n } else {\n message +=\n 'is already registered by the same version of VSCode Elements. ';\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n `[VSCode Elements] ${tagName} ${message}\\nTo suppress this warning, set window.${CONFIG_KEY} to true`\n );\n };\n};\n"]}
@@ -1,11 +1,9 @@
1
- import { VscodeTreeItem } from '../vscode-tree-item';
2
- import type { VscodeTree } from './vscode-tree';
1
+ import type { VscodeTreeItem } from '../vscode-tree-item/vscode-tree-item.js';
2
+ import type { VscodeTree } from './vscode-tree.js';
3
3
  export declare const initPathTrackerProps: (parentElement: VscodeTree | VscodeTreeItem, items: VscodeTreeItem[]) => void;
4
4
  export declare const findLastChildItem: (item: VscodeTreeItem) => VscodeTreeItem;
5
- export declare const findClosestParentHasNextSibling: (item: VscodeTreeItem) => VscodeTreeItem | null;
5
+ export declare const findClosestAncestorHasNextSibling: (item: VscodeTreeItem) => VscodeTreeItem | null;
6
6
  export declare const findNextItem: (item: VscodeTreeItem) => VscodeTreeItem | null;
7
7
  export declare const findPrevItem: (item: VscodeTreeItem) => VscodeTreeItem | null;
8
- export declare const findAncestorOnSpecificLevel: (item: VscodeTreeItem, level: number) => VscodeTreeItem | null;
9
- export declare const selectItemAndAllVisibleDescendants: (item: VscodeTreeItem) => void;
10
- export declare function getParentItem(childItem: VscodeTreeItem): VscodeTreeItem | null;
8
+ export declare function findParentItem(childItem: VscodeTreeItem): VscodeTreeItem | null;
11
9
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAQ9C,eAAO,MAAM,oBAAoB,GAC/B,eAAe,UAAU,GAAG,cAAc,EAC1C,OAAO,cAAc,EAAE,KACtB,IA6BF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,cAAc,KAAG,cAgBxD,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAC1C,MAAM,cAAc,KACnB,cAAc,GAAG,IAgBnB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,cAAc,KAAG,cAAc,GAAG,IA0CpE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,cAAc,KAAG,cAAc,GAAG,IAyBpE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,MAAM,cAAc,EACpB,OAAO,MAAM,KACZ,cAAc,GAAG,IAoBnB,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAAI,MAAM,cAAc,SAgBtE,CAAC;AAEF,wBAAgB,aAAa,CAAC,SAAS,EAAE,cAAc,yBAUtD"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,yCAAyC,CAAC;AAC5E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAQjD,eAAO,MAAM,oBAAoB,GAC/B,eAAe,UAAU,GAAG,cAAc,EAC1C,OAAO,cAAc,EAAE,KACtB,IAoBF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,cAAc,KAAG,cAYxD,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,MAAM,cAAc,KACnB,cAAc,GAAG,IAkBnB,CAAC;AAYF,eAAO,MAAM,YAAY,GAAI,MAAM,cAAc,KAAG,cAAc,GAAG,IAkCpE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,cAAc,KAAG,cAAc,GAAG,IA0BpE,CAAC;AAEF,wBAAgB,cAAc,CAAC,SAAS,EAAE,cAAc,yBAUvD"}
@@ -1,5 +1,5 @@
1
- const isTreeItem = (item) => item.tagName.toLowerCase() === 'vscode-tree-item';
2
- const isTreeRoot = (item) => item.tagName.toLowerCase() === 'vscode-tree';
1
+ const isTreeItem = (item) => item instanceof Element && item.matches('vscode-tree-item');
2
+ const isTreeRoot = (item) => item instanceof Element && item.matches('vscode-tree');
3
3
  export const initPathTrackerProps = (parentElement, items) => {
4
4
  const numChildren = items.length;
5
5
  const parentElementLevel = isTreeRoot(parentElement)
@@ -8,10 +8,7 @@ export const initPathTrackerProps = (parentElement, items) => {
8
8
  if ('branch' in parentElement) {
9
9
  parentElement.branch = numChildren > 0;
10
10
  }
11
- parentElement.dataset.numChildren = numChildren.toString();
12
11
  items.forEach((item, i) => {
13
- const level = parentElementLevel + 1;
14
- const index = i.toString();
15
12
  if ('path' in parentElement) {
16
13
  item.path = [...parentElement.path, i];
17
14
  }
@@ -19,19 +16,14 @@ export const initPathTrackerProps = (parentElement, items) => {
19
16
  item.path = [i];
20
17
  }
21
18
  item.level = parentElementLevel + 1;
22
- item.dataset.level = (parentElementLevel + 1).toString();
23
- item.dataset.index = i.toString();
24
- item.dataset.last = i === numChildren - 1 ? 'true' : 'false';
25
- item.dataset.id = `${level}_${index}`;
26
19
  item.dataset.path = item.path.join('.');
27
20
  });
28
21
  };
29
22
  export const findLastChildItem = (item) => {
30
- const children = item.querySelectorAll(':scope > vscode-tree-item');
31
- if (children.length < 1) {
23
+ const lastItem = item.lastElementChild;
24
+ if (!lastItem || !isTreeItem(lastItem)) {
32
25
  return item;
33
26
  }
34
- const lastItem = children[children.length - 1];
35
27
  if (lastItem.branch && lastItem.open) {
36
28
  return findLastChildItem(lastItem);
37
29
  }
@@ -39,58 +31,70 @@ export const findLastChildItem = (item) => {
39
31
  return lastItem;
40
32
  }
41
33
  };
42
- export const findClosestParentHasNextSibling = (item) => {
34
+ export const findClosestAncestorHasNextSibling = (item) => {
43
35
  if (!item.parentElement) {
44
36
  return null;
45
37
  }
46
38
  if (!isTreeItem(item.parentElement)) {
47
39
  return null;
48
40
  }
49
- const isLast = item.parentElement.dataset.last === 'true' ? true : false;
50
- if (!isLast) {
51
- return item.parentElement;
41
+ const nextSiblingOfParent = findNextTreeItemElementSibling(item.parentElement);
42
+ if (nextSiblingOfParent) {
43
+ return nextSiblingOfParent;
52
44
  }
53
45
  else {
54
- return findClosestParentHasNextSibling(item.parentElement);
46
+ return findClosestAncestorHasNextSibling(item.parentElement);
55
47
  }
56
48
  };
57
- export const findNextItem = (item) => {
58
- if (item.branch && item.open) {
59
- return item.querySelector('vscode-tree-item');
49
+ const findNextTreeItemElementSibling = (item) => {
50
+ let nextSibling = item.nextElementSibling;
51
+ while (nextSibling && !isTreeItem(nextSibling)) {
52
+ nextSibling = nextSibling.nextElementSibling;
60
53
  }
54
+ return nextSibling;
55
+ };
56
+ export const findNextItem = (item) => {
61
57
  const { parentElement } = item;
62
- if (!parentElement) {
58
+ if (!parentElement || !isTreeItem(item)) {
63
59
  return null;
64
60
  }
65
- const numSiblings = parseInt(parentElement.dataset.numChildren ?? '0', 10);
66
- const index = parseInt(item.dataset.index ?? '-1', 10);
67
- let level = 0;
68
- if ('level' in item) {
69
- level = item.level;
70
- }
71
- if (index === numSiblings - 1) {
72
- const closestParent = findClosestParentHasNextSibling(item);
73
- if (closestParent) {
74
- const cpIndex = parseInt(closestParent.dataset.index ?? '', 10) + 1;
75
- const cpLevel = closestParent.level;
76
- return (closestParent.parentElement?.querySelector(`vscode-tree-item[level="${cpLevel}"][data-index="${cpIndex}"]`) ?? null);
61
+ let nextItem;
62
+ if (item.branch && item.open) {
63
+ const firstChildItem = item.querySelector('vscode-tree-item');
64
+ if (!firstChildItem) {
65
+ nextItem = findNextTreeItemElementSibling(item);
66
+ if (!nextItem) {
67
+ nextItem = findClosestAncestorHasNextSibling(item);
68
+ }
77
69
  }
78
70
  else {
79
- return null;
71
+ nextItem = firstChildItem;
72
+ }
73
+ }
74
+ else {
75
+ nextItem = findNextTreeItemElementSibling(item);
76
+ if (!nextItem) {
77
+ nextItem = findClosestAncestorHasNextSibling(item);
80
78
  }
81
79
  }
82
- const nextElementIndex = Math.min(numSiblings - 1, index + 1);
83
- return parentElement.querySelector(`vscode-tree-item[level="${level}"][data-index="${nextElementIndex}"]`);
80
+ if (!nextItem) {
81
+ return item;
82
+ }
83
+ else {
84
+ return nextItem;
85
+ }
84
86
  };
85
87
  export const findPrevItem = (item) => {
86
88
  const { parentElement } = item;
87
- const index = parseInt(item.dataset.index ?? '-1', 10);
88
- if (!parentElement) {
89
+ if (!parentElement || !isTreeItem(item)) {
89
90
  return null;
90
91
  }
91
- const prevSibling = parentElement.querySelector(`:scope vscode-tree-item[data-index="${index - 1}"]`);
92
+ let prevSibling = item.previousElementSibling;
93
+ while (prevSibling && !isTreeItem(prevSibling)) {
94
+ prevSibling = prevSibling.previousElementSibling;
95
+ }
92
96
  if (!prevSibling) {
93
- if (parentElement.tagName.toLowerCase() === 'vscode-tree-item') {
97
+ if (isTreeItem(parentElement)) {
94
98
  return parentElement;
95
99
  }
96
100
  }
@@ -100,34 +104,7 @@ export const findPrevItem = (item) => {
100
104
  }
101
105
  return prevSibling;
102
106
  };
103
- export const findAncestorOnSpecificLevel = (item, level) => {
104
- if (!item.parentElement ||
105
- item.parentElement.tagName.toLowerCase() !== 'vscode-tree-item') {
106
- return null;
107
- }
108
- const parent = item.parentElement;
109
- const itemLevel = +(item.dataset.level ?? '');
110
- if (itemLevel > level) {
111
- return findAncestorOnSpecificLevel(parent, level);
112
- }
113
- if (itemLevel === level) {
114
- return item;
115
- }
116
- return null;
117
- };
118
- export const selectItemAndAllVisibleDescendants = (item) => {
119
- if (!item) {
120
- return;
121
- }
122
- item.selected = true;
123
- if (item.branch && item.open) {
124
- const children = item.querySelectorAll(':scope > vscode-tree-item');
125
- children.forEach((c) => {
126
- selectItemAndAllVisibleDescendants(c);
127
- });
128
- }
129
- };
130
- export function getParentItem(childItem) {
107
+ export function findParentItem(childItem) {
131
108
  if (!childItem.parentElement) {
132
109
  return null;
133
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/vscode-tree/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import {VscodeTreeItem} from '../vscode-tree-item';\nimport type {VscodeTree} from './vscode-tree';\n\nconst isTreeItem = (item: HTMLElement): item is VscodeTreeItem =>\n item.tagName.toLowerCase() === 'vscode-tree-item';\n\nconst isTreeRoot = (item: HTMLElement): item is VscodeTree =>\n item.tagName.toLowerCase() === 'vscode-tree';\n\nexport const initPathTrackerProps = (\n parentElement: VscodeTree | VscodeTreeItem,\n items: VscodeTreeItem[]\n): void => {\n const numChildren = items.length;\n const parentElementLevel = isTreeRoot(parentElement)\n ? -1\n : (parentElement as VscodeTreeItem).level;\n\n if ('branch' in parentElement) {\n parentElement.branch = numChildren > 0;\n }\n\n parentElement.dataset.numChildren = numChildren.toString();\n\n items.forEach((item, i) => {\n const level = parentElementLevel + 1;\n const index = i.toString();\n\n if ('path' in parentElement) {\n item.path = [...parentElement.path, i];\n } else {\n item.path = [i];\n }\n\n item.level = parentElementLevel + 1;\n item.dataset.level = (parentElementLevel + 1).toString();\n item.dataset.index = i.toString();\n item.dataset.last = i === numChildren - 1 ? 'true' : 'false';\n item.dataset.id = `${level}_${index}`;\n item.dataset.path = item.path.join('.');\n });\n};\n\nexport const findLastChildItem = (item: VscodeTreeItem): VscodeTreeItem => {\n const children = item.querySelectorAll<VscodeTreeItem>(\n ':scope > vscode-tree-item'\n );\n\n if (children.length < 1) {\n return item;\n }\n\n const lastItem = children[children.length - 1];\n\n if (lastItem.branch && lastItem.open) {\n return findLastChildItem(lastItem);\n } else {\n return lastItem;\n }\n};\n\nexport const findClosestParentHasNextSibling = (\n item: VscodeTreeItem\n): VscodeTreeItem | null => {\n if (!item.parentElement) {\n return null;\n }\n\n if (!isTreeItem(item.parentElement)) {\n return null;\n }\n\n const isLast = item.parentElement.dataset.last === 'true' ? true : false;\n\n if (!isLast) {\n return item.parentElement;\n } else {\n return findClosestParentHasNextSibling(item.parentElement);\n }\n};\n\nexport const findNextItem = (item: VscodeTreeItem): VscodeTreeItem | null => {\n if (item.branch && item.open) {\n return item.querySelector<VscodeTreeItem>('vscode-tree-item');\n }\n\n const {parentElement} = item;\n\n if (!parentElement) {\n return null;\n }\n\n const numSiblings = parseInt(parentElement.dataset.numChildren ?? '0', 10);\n const index = parseInt(item.dataset.index ?? '-1', 10);\n\n let level = 0;\n\n if ('level' in item) {\n level = item.level;\n }\n\n if (index === numSiblings - 1) {\n const closestParent = findClosestParentHasNextSibling(item);\n\n if (closestParent) {\n const cpIndex = parseInt(closestParent.dataset.index ?? '', 10) + 1;\n const cpLevel = closestParent.level;\n\n return (\n closestParent.parentElement?.querySelector(\n `vscode-tree-item[level=\"${cpLevel}\"][data-index=\"${cpIndex}\"]`\n ) ?? null\n );\n } else {\n return null;\n }\n }\n\n const nextElementIndex = Math.min(numSiblings - 1, index + 1);\n\n return parentElement.querySelector<VscodeTreeItem>(\n `vscode-tree-item[level=\"${level}\"][data-index=\"${nextElementIndex}\"]`\n );\n};\n\nexport const findPrevItem = (item: VscodeTreeItem): VscodeTreeItem | null => {\n const {parentElement} = item;\n const index = parseInt(item.dataset.index ?? '-1', 10);\n\n if (!parentElement) {\n return null;\n }\n\n const prevSibling = parentElement.querySelector<VscodeTreeItem>(\n `:scope vscode-tree-item[data-index=\"${index - 1}\"]`\n );\n\n if (!prevSibling) {\n if (parentElement.tagName.toLowerCase() === 'vscode-tree-item') {\n return parentElement as VscodeTreeItem;\n }\n }\n\n if (prevSibling && prevSibling.branch && prevSibling.open) {\n const lastChild = findLastChildItem(prevSibling);\n\n return lastChild;\n }\n\n return prevSibling;\n};\n\nexport const findAncestorOnSpecificLevel = (\n item: VscodeTreeItem,\n level: number\n): VscodeTreeItem | null => {\n if (\n !item.parentElement ||\n item.parentElement.tagName.toLowerCase() !== 'vscode-tree-item'\n ) {\n return null;\n }\n\n const parent = item.parentElement as VscodeTreeItem;\n const itemLevel = +(item.dataset.level ?? '');\n\n if (itemLevel > level) {\n return findAncestorOnSpecificLevel(parent, level);\n }\n\n if (itemLevel === level) {\n return item;\n }\n\n return null;\n};\n\nexport const selectItemAndAllVisibleDescendants = (item: VscodeTreeItem) => {\n if (!item) {\n return;\n }\n\n item.selected = true;\n\n if (item.branch && item.open) {\n const children = item.querySelectorAll<VscodeTreeItem>(\n ':scope > vscode-tree-item'\n );\n\n children.forEach((c) => {\n selectItemAndAllVisibleDescendants(c);\n });\n }\n};\n\nexport function getParentItem(childItem: VscodeTreeItem) {\n if (!childItem.parentElement) {\n return null;\n }\n\n if (!isTreeItem(childItem.parentElement)) {\n return null;\n }\n\n return childItem.parentElement;\n}\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/vscode-tree/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {VscodeTreeItem} from '../vscode-tree-item/vscode-tree-item.js';\nimport type {VscodeTree} from './vscode-tree.js';\n\nconst isTreeItem = (item: Element | null | undefined): item is VscodeTreeItem =>\n item instanceof Element && item.matches('vscode-tree-item');\n\nconst isTreeRoot = (item: Element | null | undefined): item is VscodeTree =>\n item instanceof Element && item.matches('vscode-tree');\n\nexport const initPathTrackerProps = (\n parentElement: VscodeTree | VscodeTreeItem,\n items: VscodeTreeItem[]\n): void => {\n const numChildren = items.length;\n const parentElementLevel = isTreeRoot(parentElement)\n ? -1\n : (parentElement as VscodeTreeItem).level;\n\n if ('branch' in parentElement) {\n parentElement.branch = numChildren > 0;\n }\n\n items.forEach((item, i) => {\n if ('path' in parentElement) {\n item.path = [...parentElement.path, i];\n } else {\n item.path = [i];\n }\n\n item.level = parentElementLevel + 1;\n item.dataset.path = item.path.join('.');\n });\n};\n\nexport const findLastChildItem = (item: VscodeTreeItem): VscodeTreeItem => {\n const lastItem = item.lastElementChild;\n\n if (!lastItem || !isTreeItem(lastItem)) {\n return item;\n }\n\n if (lastItem.branch && lastItem.open) {\n return findLastChildItem(lastItem);\n } else {\n return lastItem;\n }\n};\n\nexport const findClosestAncestorHasNextSibling = (\n item: VscodeTreeItem\n): VscodeTreeItem | null => {\n if (!item.parentElement) {\n return null;\n }\n\n if (!isTreeItem(item.parentElement)) {\n return null;\n }\n\n const nextSiblingOfParent = findNextTreeItemElementSibling(\n item.parentElement\n );\n\n if (nextSiblingOfParent) {\n return nextSiblingOfParent;\n } else {\n return findClosestAncestorHasNextSibling(item.parentElement);\n }\n};\n\nconst findNextTreeItemElementSibling = (item: VscodeTreeItem) => {\n let nextSibling: Element | null = item.nextElementSibling;\n\n while (nextSibling && !isTreeItem(nextSibling)) {\n nextSibling = nextSibling.nextElementSibling;\n }\n\n return nextSibling;\n};\n\nexport const findNextItem = (item: VscodeTreeItem): VscodeTreeItem | null => {\n const {parentElement} = item;\n\n if (!parentElement || !isTreeItem(item)) {\n return null;\n }\n\n let nextItem: VscodeTreeItem | null;\n\n if (item.branch && item.open) {\n const firstChildItem = item.querySelector('vscode-tree-item');\n\n if (!firstChildItem) {\n nextItem = findNextTreeItemElementSibling(item);\n\n if (!nextItem) {\n nextItem = findClosestAncestorHasNextSibling(item);\n }\n } else {\n nextItem = firstChildItem;\n }\n } else {\n nextItem = findNextTreeItemElementSibling(item);\n\n if (!nextItem) {\n nextItem = findClosestAncestorHasNextSibling(item);\n }\n }\n\n if (!nextItem) {\n return item;\n } else {\n return nextItem;\n }\n};\n\nexport const findPrevItem = (item: VscodeTreeItem): VscodeTreeItem | null => {\n const {parentElement} = item;\n\n if (!parentElement || !isTreeItem(item)) {\n return null;\n }\n\n let prevSibling: Element | null = item.previousElementSibling;\n\n while (prevSibling && !isTreeItem(prevSibling)) {\n prevSibling = prevSibling.previousElementSibling;\n }\n\n if (!prevSibling) {\n if (isTreeItem(parentElement)) {\n return parentElement;\n }\n }\n\n if (prevSibling && prevSibling.branch && prevSibling.open) {\n const lastChild = findLastChildItem(prevSibling);\n\n return lastChild;\n }\n\n return prevSibling;\n};\n\nexport function findParentItem(childItem: VscodeTreeItem) {\n if (!childItem.parentElement) {\n return null;\n }\n\n if (!isTreeItem(childItem.parentElement)) {\n return null;\n }\n\n return childItem.parentElement;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { VscodeTreeItem } from '../vscode-tree-item';
2
- import type { ExpandMode, VscodeTree } from './vscode-tree';
2
+ import type { ExpandMode, IndentGuideDisplay, VscodeTree } from './vscode-tree';
3
3
  export interface TreeContext {
4
4
  isShiftPressed: boolean;
5
5
  selectedItems: Set<VscodeTreeItem>;
@@ -13,18 +13,18 @@ export interface TreeContext {
13
13
  hasBranchItem: boolean;
14
14
  rootElement: VscodeTree | null;
15
15
  activeItem: VscodeTreeItem | null;
16
- highlightedItems: VscodeTreeItem[];
17
- highlightGuides?: () => void;
16
+ highlightedItems?: Set<VscodeTreeItem>;
17
+ highlightIndentGuides?: () => void;
18
18
  emitSelectEvent?: () => void;
19
19
  }
20
20
  export declare const treeContext: {
21
21
  __context__: TreeContext;
22
22
  };
23
23
  export interface ConfigContext {
24
- readonly arrows: boolean;
24
+ readonly hideArrows: boolean;
25
25
  readonly expandMode: ExpandMode;
26
26
  readonly indent: number;
27
- readonly indentGuides: boolean;
27
+ readonly indentGuides: IndentGuideDisplay;
28
28
  readonly multiSelect: boolean;
29
29
  }
30
30
  export declare const configContext: {
@@ -1 +1 @@
1
- {"version":3,"file":"tree-context.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/tree-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC5C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW;;CAA4C,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,aAAa;;CAEzB,CAAC"}
1
+ {"version":3,"file":"tree-context.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/tree-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAC,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC5C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACvC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW;;CAA4C,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,aAAa;;CAEzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tree-context.js","sourceRoot":"","sources":["../../src/vscode-tree/tree-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAsB3C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAc,aAAa,CAAC,CAAC;AAUrE,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CACxC,MAAM,CAAC,eAAe,CAAC,CACxB,CAAC","sourcesContent":["import {createContext} from '@lit/context';\nimport type {VscodeTreeItem} from '../vscode-tree-item';\nimport type {ExpandMode, VscodeTree} from './vscode-tree';\n\nexport interface TreeContext {\n isShiftPressed: boolean;\n selectedItems: Set<VscodeTreeItem>;\n allItems: NodeListOf<VscodeTreeItem> | null;\n itemListUpToDate: boolean;\n focusedItem: VscodeTreeItem | null;\n prevFocusedItem: VscodeTreeItem | null;\n /** If arrows are visible and `List` component has not any branch item, the\n * extra padding should be removed in the leaf elements before the content\n */\n hasBranchItem: boolean;\n rootElement: VscodeTree | null;\n activeItem: VscodeTreeItem | null;\n highlightedItems: VscodeTreeItem[];\n highlightGuides?: () => void;\n emitSelectEvent?: () => void;\n}\n\nexport const treeContext = createContext<TreeContext>('vscode-list');\n\nexport interface ConfigContext {\n readonly arrows: boolean;\n readonly expandMode: ExpandMode;\n readonly indent: number;\n readonly indentGuides: boolean;\n readonly multiSelect: boolean;\n}\n\nexport const configContext = createContext<ConfigContext>(\n Symbol('configContext')\n);\n"]}
1
+ {"version":3,"file":"tree-context.js","sourceRoot":"","sources":["../../src/vscode-tree/tree-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAsB3C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAc,aAAa,CAAC,CAAC;AAUrE,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CACxC,MAAM,CAAC,eAAe,CAAC,CACxB,CAAC","sourcesContent":["import {createContext} from '@lit/context';\nimport type {VscodeTreeItem} from '../vscode-tree-item';\nimport type {ExpandMode, IndentGuideDisplay, VscodeTree} from './vscode-tree';\n\nexport interface TreeContext {\n isShiftPressed: boolean;\n selectedItems: Set<VscodeTreeItem>;\n allItems: NodeListOf<VscodeTreeItem> | null;\n itemListUpToDate: boolean;\n focusedItem: VscodeTreeItem | null;\n prevFocusedItem: VscodeTreeItem | null;\n /** If arrows are visible and `List` component has not any branch item, the\n * extra padding should be removed in the leaf elements before the content\n */\n hasBranchItem: boolean;\n rootElement: VscodeTree | null;\n activeItem: VscodeTreeItem | null;\n highlightedItems?: Set<VscodeTreeItem>;\n highlightIndentGuides?: () => void;\n emitSelectEvent?: () => void;\n}\n\nexport const treeContext = createContext<TreeContext>('vscode-list');\n\nexport interface ConfigContext {\n readonly hideArrows: boolean;\n readonly expandMode: ExpandMode;\n readonly indent: number;\n readonly indentGuides: IndentGuideDisplay;\n readonly multiSelect: boolean;\n}\n\nexport const configContext = createContext<ConfigContext>(\n Symbol('configContext')\n);\n"]}
@@ -4,17 +4,77 @@ import type { VscodeTreeItem } from '../vscode-tree-item';
4
4
  export type VscTreeSelectEvent = CustomEvent<{
5
5
  selectedItems: VscodeTreeItem[];
6
6
  }>;
7
- export declare const EXPAND_MODE: {
8
- readonly SINGLE_CLICK: "singleClick";
9
- readonly DOUBLE_CLICK: "doubleClick";
7
+ export declare const ExpandMode: {
8
+ readonly singleClick: "singleClick";
9
+ readonly doubleClick: "doubleClick";
10
10
  };
11
- export type ExpandMode = (typeof EXPAND_MODE)[keyof typeof EXPAND_MODE];
11
+ export type ExpandMode = (typeof ExpandMode)[keyof typeof ExpandMode];
12
+ export declare const IndentGuides: {
13
+ readonly none: "none";
14
+ readonly onHover: "onHover";
15
+ readonly always: "always";
16
+ };
17
+ export type IndentGuideDisplay = (typeof IndentGuides)[keyof typeof IndentGuides];
18
+ /**
19
+ * @tag vscode-tree
20
+ */
12
21
  export declare class VscodeTree extends VscElement {
13
22
  static styles: import("lit").CSSResultGroup;
14
- arrows: boolean;
23
+ /**
24
+ * Although arrows are always visible in the Tree component by default in VSCode, some icon sets
25
+ * (e.g., Material Icon Theme) allow disabling them in the file explorer view. This flag makes it
26
+ * possible to mimic that behavior.
27
+ *
28
+ * @type {boolean}
29
+ * @default false
30
+ */
31
+ hideArrows: boolean;
32
+ /**
33
+ * Controls how tree folders are expanded when clicked. This property is designed to use
34
+ * the `workbench.tree.expandMode` setting.
35
+ *
36
+ * Valid options are available as constants.
37
+ *
38
+ * ```javascript
39
+ * import {ExpandMode} from '@vscode-elements/elements/dist/vscode-tree/vscode-tree.js';
40
+ *
41
+ * document.querySelector('vscode-tree').expandMode = ExpandMode.singleClick;
42
+ * ```
43
+ *
44
+ * @type {'singleClick' | 'doubleClick'}
45
+ * @default 'singleClick'
46
+ */
15
47
  expandMode: ExpandMode;
48
+ /**
49
+ * Controls the indentation in pixels. This property is designed to use the
50
+ * `workbench.tree.indent` setting.
51
+ *
52
+ * @type {number}
53
+ * @default 8
54
+ */
16
55
  indent: number;
17
- indentGuides: boolean;
56
+ /**
57
+ * Controls whether the tree should render indent guides. This property is
58
+ * designed to use the `workbench.tree.renderIndentGuides` setting.
59
+ *
60
+ * Valid options are available as constants.
61
+ *
62
+ * ```javascript
63
+ * import {IndentGuides} from '@vscode-elements/elements/dist/vscode-tree/vscode-tree.js';
64
+ *
65
+ * document.querySelector('vscode-tree').expandMode = IndentGuides.onHover;
66
+ * ```
67
+ *
68
+ * @type {'none' | 'onHover' | 'always'}
69
+ * @default 'onHover'
70
+ */
71
+ indentGuides: IndentGuideDisplay;
72
+ /**
73
+ * Allows selecting multiple items.
74
+ *
75
+ * @type {boolean}
76
+ * @default false
77
+ */
18
78
  multiSelect: boolean;
19
79
  private _treeContextState;
20
80
  private _configContext;
@@ -22,7 +82,13 @@ export declare class VscodeTree extends VscElement {
22
82
  constructor();
23
83
  connectedCallback(): void;
24
84
  protected willUpdate(changedProperties: PropertyValues<this>): void;
85
+ /**
86
+ * Expands all folders.
87
+ */
25
88
  expandAll(): void;
89
+ /**
90
+ * Collapses all folders.
91
+ */
26
92
  collapseAll(): void;
27
93
  /**
28
94
  * @internal
@@ -31,7 +97,8 @@ export declare class VscodeTree extends VscElement {
31
97
  */
32
98
  updateHasBranchItemFlag(): void;
33
99
  private _emitSelectEvent;
34
- private _highlightGuides;
100
+ private _highlightIndentGuideOfItem;
101
+ private _highlightIndentGuides;
35
102
  private _updateConfigContext;
36
103
  private _focusItem;
37
104
  private _focusPrevItem;
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-tree.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,cAAc,EAAO,MAAM,KAAK,CAAC;AAOzD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAexD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;IAAC,aAAa,EAAE,cAAc,EAAE,CAAA;CAAC,CAAC,CAAC;AAEhF,eAAO,MAAM,WAAW;;;CAGd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AA4BxE,qBACa,UAAW,SAAQ,UAAU;IACxC,OAAgB,MAAM,+BAAU;IAKhC,MAAM,UAAkB;IAGxB,UAAU,EAAE,UAAU,CAAuB;IAG7C,MAAM,SAAkB;IAGxB,YAAY,UAAyB;IAGrC,WAAW,UAAwB;IAOnC,OAAO,CAAC,iBAAiB,CAiBvB;IAGF,OAAO,CAAC,cAAc,CAMpB;IAGF,OAAO,CAAC,kBAAkB,CAAoB;;IAWrC,iBAAiB,IAAI,IAAI;cAMf,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAY5E,SAAS;IAUT,WAAW;IAUX;;;;OAIG;IACH,uBAAuB;IASvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,uBAAuB,CA8B7B;IAEF,OAAO,CAAC,qBAAqB,CAI3B;IAEF,OAAO,CAAC,iBAAiB,CAiBvB;IAIO,MAAM,IAAI,cAAc;CAKlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;IAED,UAAU,2BAA2B;QACnC,iBAAiB,EAAE,kBAAkB,CAAC;KACvC;CACF"}
1
+ {"version":3,"file":"vscode-tree.d.ts","sourceRoot":"","sources":["../../src/vscode-tree/vscode-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,cAAc,EAAO,MAAM,KAAK,CAAC;AAOzD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAexD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;IAAC,aAAa,EAAE,cAAc,EAAE,CAAA;CAAC,CAAC,CAAC;AAEhF,eAAO,MAAM,UAAU;;;CAGb,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEtE,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAC5B,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AA4BnD;;GAEG;AACH,qBACa,UAAW,SAAQ,UAAU;IACxC,OAAgB,MAAM,+BAAU;IAIhC;;;;;;;OAOG;IAEH,UAAU,EAAE,OAAO,CAAuB;IAE1C;;;;;;;;;;;;;;OAcG;IAEH,UAAU,EAAE,UAAU,CAAuB;IAE7C;;;;;;OAMG;IAEH,MAAM,EAAE,MAAM,CAAkB;IAEhC;;;;;;;;;;;;;;OAcG;IAOH,YAAY,EAAE,kBAAkB,CAAgC;IAEhE;;;;;OAKG;IAEH,WAAW,EAAE,OAAO,CAAwB;IAO5C,OAAO,CAAC,iBAAiB,CAiBvB;IAGF,OAAO,CAAC,cAAc,CAMpB;IAGF,OAAO,CAAC,kBAAkB,CAAoB;;IAarC,iBAAiB,IAAI,IAAI;cAMf,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAY5E;;OAEG;IACH,SAAS;IAUT;;OAEG;IACH,WAAW;IAUX;;;;OAIG;IACH,uBAAuB;IASvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,2BAA2B;IAcnC,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,uBAAuB,CA8B7B;IAEF,OAAO,CAAC,qBAAqB,CAI3B;IAEF,OAAO,CAAC,iBAAiB,CAevB;IAIO,MAAM,IAAI,cAAc;CAKlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;IAED,UAAU,2BAA2B;QACnC,iBAAiB,EAAE,kBAAkB,CAAC;KACvC;CACF"}