@genexus/genexus-ide-ui 0.0.45 → 0.0.47

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.
Files changed (208) hide show
  1. package/dist/cjs/{ch-tree-x_3.cjs.entry.js → ch-checkbox_4.cjs.entry.js} +249 -184
  2. package/dist/cjs/ch-global-stylesheet-0e78f960.js +20 -0
  3. package/dist/cjs/ch-grid-action-refresh_6.cjs.entry.js +43 -37
  4. package/dist/cjs/ch-grid-infinite-scroll.cjs.entry.js +57 -0
  5. package/dist/cjs/ch-grid-virtual-scroller.cjs.entry.js +31 -25
  6. package/dist/cjs/ch-grid_8.cjs.entry.js +30 -21
  7. package/dist/cjs/ch-style.cjs.entry.js +5 -5
  8. package/dist/cjs/ch-suggest_4.cjs.entry.js +1 -1
  9. package/dist/cjs/ch-test-tree-x.cjs.entry.js +26 -6
  10. package/dist/cjs/ch-window_2.cjs.entry.js +2 -2
  11. package/dist/cjs/{common-facb7f18.js → common-5d08e273.js} +10 -4
  12. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  13. package/dist/cjs/gx-ide-container_5.cjs.entry.js +2 -2
  14. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +2 -2
  15. package/dist/cjs/gx-ide-entity-selector_2.cjs.entry.js +2 -2
  16. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
  17. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +40 -55
  18. package/dist/cjs/gx-ide-new-object.cjs.entry.js +1 -4
  19. package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js +1 -1
  20. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
  21. package/dist/cjs/gxg-button.cjs.entry.js +1 -1
  22. package/dist/cjs/gxg-combo-box_2.cjs.entry.js +39 -42
  23. package/dist/cjs/gxg-drop-down.cjs.entry.js +1 -1
  24. package/dist/cjs/gxg-form-checkbox.cjs.entry.js +1 -1
  25. package/dist/cjs/gxg-form-text.cjs.entry.js +3 -2
  26. package/dist/cjs/gxg-form-textarea.cjs.entry.js +1 -1
  27. package/dist/cjs/gxg-label_2.cjs.entry.js +1 -1
  28. package/dist/cjs/gxg-list-box_2.cjs.entry.js +71 -60
  29. package/dist/cjs/gxg-menu-slim-item.cjs.entry.js +1 -1
  30. package/dist/cjs/gxg-option.cjs.entry.js +1 -1
  31. package/dist/cjs/gxg-select.cjs.entry.js +1 -1
  32. package/dist/cjs/gxg-test.cjs.entry.js +86 -79
  33. package/dist/cjs/gxg-tree-view.cjs.entry.js +342 -0
  34. package/dist/cjs/gxg-tree_2.cjs.entry.js +1 -1
  35. package/dist/cjs/{helpers-8845f008.js → helpers-291cb1cb.js} +10 -0
  36. package/dist/cjs/loader.cjs.js +1 -1
  37. package/dist/collection/collection-manifest.json +2 -0
  38. package/dist/collection/common/common.js +10 -4
  39. package/dist/collection/components/container/container.css +5 -0
  40. package/dist/collection/components/create-kb-from-server/create-kb-from-server.js +1 -1
  41. package/dist/collection/components/entity-selector/entity-selector.css +1 -1
  42. package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +50 -10
  43. package/dist/collection/components/new-kb/new-kb.js +39 -54
  44. package/dist/collection/components/new-object/new-object.js +1 -4
  45. package/dist/collection/components/team-dev-select-recent-comment/team-dev-select-recent-comment.js +1 -1
  46. package/dist/components/button.js +1 -1
  47. package/dist/components/ch-global-stylesheet.js +14 -1
  48. package/dist/components/ch-grid-infinite-scroll.js +75 -0
  49. package/dist/components/ch-grid-rowset-legend.js +32 -1
  50. package/dist/components/ch-grid-virtual-scroller.js +32 -25
  51. package/dist/components/ch-grid2.js +30 -21
  52. package/dist/components/ch-paginator2.js +43 -37
  53. package/dist/components/ch-style.js +5 -5
  54. package/dist/components/ch-test-tree-x.js +29 -7
  55. package/dist/components/ch-window2.js +2 -2
  56. package/dist/components/combo-box-item.js +2 -2
  57. package/dist/components/combo-box.js +37 -41
  58. package/dist/components/common.js +10 -4
  59. package/dist/components/container.js +1 -1
  60. package/dist/components/date-picker.js +1 -1
  61. package/dist/components/entity-selector.js +1 -1
  62. package/dist/components/form-checkbox.js +1 -1
  63. package/dist/components/form-text.js +3 -2
  64. package/dist/components/form-textarea.js +1 -1
  65. package/dist/components/gx-ide-create-kb-from-server.js +1 -1
  66. package/dist/components/gx-ide-new-kb.js +40 -55
  67. package/dist/components/gx-ide-new-object.js +1 -4
  68. package/dist/components/gx-ide-team-dev-select-recent-comment.js +1 -1
  69. package/dist/components/gxg-drop-down.js +1 -1
  70. package/dist/components/gxg-label2.js +1 -1
  71. package/dist/components/gxg-menu-slim-item.js +1 -1
  72. package/dist/components/gxg-option.js +1 -1
  73. package/dist/components/gxg-select.js +1 -1
  74. package/dist/components/gxg-test.js +106 -145
  75. package/dist/components/gxg-tree-item2.js +1 -1
  76. package/dist/components/gxg-tree-view.js +393 -0
  77. package/dist/components/helpers.js +10 -1
  78. package/dist/components/index.js +2 -0
  79. package/dist/components/list-box-item.js +15 -18
  80. package/dist/components/list-box.js +58 -46
  81. package/dist/components/suggest.js +1 -1
  82. package/dist/components/tab-button.js +1 -1
  83. package/dist/components/tree-x-list-item.js +42 -48
  84. package/dist/components/tree-x-list.js +2 -51
  85. package/dist/components/tree-x.js +124 -91
  86. package/dist/esm/{ch-tree-x_3.entry.js → ch-checkbox_4.entry.js} +249 -185
  87. package/dist/esm/ch-global-stylesheet-4638bea5.js +16 -0
  88. package/dist/esm/ch-grid-action-refresh_6.entry.js +43 -37
  89. package/dist/esm/ch-grid-infinite-scroll.entry.js +53 -0
  90. package/dist/esm/ch-grid-virtual-scroller.entry.js +31 -25
  91. package/dist/esm/ch-grid_8.entry.js +30 -21
  92. package/dist/esm/ch-style.entry.js +5 -5
  93. package/dist/esm/ch-suggest_4.entry.js +1 -1
  94. package/dist/esm/ch-test-tree-x.entry.js +26 -6
  95. package/dist/esm/ch-window_2.entry.js +2 -2
  96. package/dist/esm/{common-a3df0966.js → common-ec35ec2f.js} +10 -4
  97. package/dist/esm/genexus-ide-ui.js +1 -1
  98. package/dist/esm/gx-ide-container_5.entry.js +2 -2
  99. package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -2
  100. package/dist/esm/gx-ide-entity-selector_2.entry.js +2 -2
  101. package/dist/esm/gx-ide-new-environment.entry.js +1 -1
  102. package/dist/esm/gx-ide-new-kb.entry.js +40 -55
  103. package/dist/esm/gx-ide-new-object.entry.js +1 -4
  104. package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js +1 -1
  105. package/dist/esm/gx-ide-ww-images.entry.js +1 -1
  106. package/dist/esm/gxg-button.entry.js +1 -1
  107. package/dist/esm/gxg-combo-box_2.entry.js +39 -42
  108. package/dist/esm/gxg-drop-down.entry.js +1 -1
  109. package/dist/esm/gxg-form-checkbox.entry.js +1 -1
  110. package/dist/esm/gxg-form-text.entry.js +3 -2
  111. package/dist/esm/gxg-form-textarea.entry.js +1 -1
  112. package/dist/esm/gxg-label_2.entry.js +1 -1
  113. package/dist/esm/gxg-list-box_2.entry.js +71 -60
  114. package/dist/esm/gxg-menu-slim-item.entry.js +1 -1
  115. package/dist/esm/gxg-option.entry.js +1 -1
  116. package/dist/esm/gxg-select.entry.js +1 -1
  117. package/dist/esm/gxg-test.entry.js +87 -80
  118. package/dist/esm/gxg-tree-view.entry.js +338 -0
  119. package/dist/esm/gxg-tree_2.entry.js +1 -1
  120. package/dist/esm/{helpers-56190205.js → helpers-1ecd5e26.js} +10 -1
  121. package/dist/esm/loader.js +1 -1
  122. package/dist/genexus-ide-ui/genexus-ide-ui.css +2 -2
  123. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  124. package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +50 -10
  125. package/dist/genexus-ide-ui/p-052744b8.entry.js +1 -0
  126. package/dist/genexus-ide-ui/{p-9014609e.entry.js → p-059830b9.entry.js} +1 -1
  127. package/dist/genexus-ide-ui/{p-e5a3e3b9.entry.js → p-282b73f8.entry.js} +1 -1
  128. package/dist/genexus-ide-ui/{p-6da13f78.entry.js → p-2aeae374.entry.js} +1 -1
  129. package/dist/genexus-ide-ui/p-437069b0.entry.js +1 -0
  130. package/dist/genexus-ide-ui/p-447c3a31.entry.js +1 -0
  131. package/dist/genexus-ide-ui/p-4ff84cb2.entry.js +1 -0
  132. package/dist/genexus-ide-ui/{p-c38c6957.entry.js → p-54d15f4d.entry.js} +1 -1
  133. package/dist/genexus-ide-ui/p-5c0cb73d.entry.js +1 -0
  134. package/dist/genexus-ide-ui/{p-0141cbce.entry.js → p-5cb871e3.entry.js} +1 -1
  135. package/dist/genexus-ide-ui/{p-a82042ee.entry.js → p-64cbe277.entry.js} +1 -1
  136. package/dist/genexus-ide-ui/{p-50c603e6.entry.js → p-7c88194a.entry.js} +1 -1
  137. package/dist/genexus-ide-ui/p-7dbe195c.entry.js +1 -0
  138. package/dist/genexus-ide-ui/p-8c4b08ea.entry.js +1 -0
  139. package/dist/genexus-ide-ui/p-93b1e1e9.entry.js +1 -0
  140. package/dist/genexus-ide-ui/p-98c6b820.entry.js +1 -0
  141. package/dist/genexus-ide-ui/p-9aa2dd17.entry.js +1 -0
  142. package/dist/genexus-ide-ui/p-9ba292a0.entry.js +1 -0
  143. package/dist/genexus-ide-ui/p-a2fa3132.entry.js +1 -0
  144. package/dist/genexus-ide-ui/p-b374d112.js +1 -0
  145. package/dist/genexus-ide-ui/p-b5dc509f.entry.js +1 -0
  146. package/dist/genexus-ide-ui/p-b8d5c561.js +1 -0
  147. package/dist/genexus-ide-ui/p-c0edbeb5.entry.js +1 -0
  148. package/dist/genexus-ide-ui/{p-f1116ac5.entry.js → p-cbeac1ab.entry.js} +1 -1
  149. package/dist/genexus-ide-ui/p-cd5482fa.entry.js +1 -0
  150. package/dist/genexus-ide-ui/{p-6c825ffc.entry.js → p-ce7a7b5f.entry.js} +1 -1
  151. package/dist/genexus-ide-ui/p-d02f6ce4.entry.js +1 -0
  152. package/dist/genexus-ide-ui/p-d30c5a8e.entry.js +1 -0
  153. package/dist/genexus-ide-ui/p-d312fe25.entry.js +1 -0
  154. package/dist/genexus-ide-ui/p-d557b2fe.entry.js +1 -0
  155. package/dist/genexus-ide-ui/{p-72e1b9d5.entry.js → p-e586d05e.entry.js} +1 -1
  156. package/dist/genexus-ide-ui/p-e6ae0460.entry.js +1 -0
  157. package/dist/genexus-ide-ui/p-eb8f4ad5.js +1 -0
  158. package/dist/genexus-ide-ui/p-eddf8a1e.entry.js +1 -0
  159. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/grid/grid-infinite-scroll/ch-grid-infinite-scroll.css +9 -0
  160. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +1 -1
  161. package/dist/node_modules/@genexus/gemini/dist/collection/components/button/button.css +1 -1
  162. package/dist/node_modules/@genexus/gemini/dist/collection/components/combo-box-item/combo-box-item.css +9 -5
  163. package/dist/node_modules/@genexus/gemini/dist/collection/components/date-picker/date-picker.css +1 -1
  164. package/dist/node_modules/@genexus/gemini/dist/collection/components/drop-down/drop-down.css +1 -1
  165. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-checkbox/form-checkbox.css +3 -3
  166. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-option/option.css +1 -1
  167. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-select/select.css +1 -1
  168. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-text/form-text.css +7 -7
  169. package/dist/node_modules/@genexus/gemini/dist/collection/components/form-textarea/form-textarea.css +3 -3
  170. package/dist/node_modules/@genexus/gemini/dist/collection/components/label/gxg-label.css +1 -1
  171. package/dist/node_modules/@genexus/gemini/dist/collection/components/list-box/list-box.css +16 -9
  172. package/dist/node_modules/@genexus/gemini/dist/collection/components/list-box-item/list-box-item.css +27 -9
  173. package/dist/node_modules/@genexus/gemini/dist/collection/components/menu-slim/item/item.css +6 -6
  174. package/dist/node_modules/@genexus/gemini/dist/collection/components/suggest/styles.css +5 -5
  175. package/dist/node_modules/@genexus/gemini/dist/collection/components/tab-button/tab-button.css +1 -1
  176. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-item/gxg-tree-item.css +4 -4
  177. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +49 -0
  178. package/dist/types/common/common.d.ts +1 -1
  179. package/dist/types/components/new-kb/new-kb.d.ts +0 -9
  180. package/package.json +3 -3
  181. package/dist/cjs/ch-checkbox.cjs.entry.js +0 -93
  182. package/dist/cjs/ch-global-stylesheet-145c4b20.js +0 -5
  183. package/dist/components/ch-grid-rowset-legend2.js +0 -34
  184. package/dist/esm/ch-checkbox.entry.js +0 -89
  185. package/dist/esm/ch-global-stylesheet-f8bbf095.js +0 -3
  186. package/dist/genexus-ide-ui/p-04f69ecc.entry.js +0 -1
  187. package/dist/genexus-ide-ui/p-080f6c41.js +0 -1
  188. package/dist/genexus-ide-ui/p-1ccf523f.entry.js +0 -1
  189. package/dist/genexus-ide-ui/p-24f47ee2.entry.js +0 -1
  190. package/dist/genexus-ide-ui/p-28d0afda.entry.js +0 -1
  191. package/dist/genexus-ide-ui/p-44964acf.js +0 -1
  192. package/dist/genexus-ide-ui/p-4b7f7425.entry.js +0 -1
  193. package/dist/genexus-ide-ui/p-597a1d43.entry.js +0 -1
  194. package/dist/genexus-ide-ui/p-6afc6187.entry.js +0 -1
  195. package/dist/genexus-ide-ui/p-70489f0c.entry.js +0 -1
  196. package/dist/genexus-ide-ui/p-84e91b37.entry.js +0 -1
  197. package/dist/genexus-ide-ui/p-87e8eb72.js +0 -1
  198. package/dist/genexus-ide-ui/p-8bf7f0e1.entry.js +0 -1
  199. package/dist/genexus-ide-ui/p-8c2ab053.entry.js +0 -1
  200. package/dist/genexus-ide-ui/p-917c5696.entry.js +0 -1
  201. package/dist/genexus-ide-ui/p-92e84fcc.entry.js +0 -1
  202. package/dist/genexus-ide-ui/p-9dc36eb3.entry.js +0 -1
  203. package/dist/genexus-ide-ui/p-ad9fdfdf.entry.js +0 -1
  204. package/dist/genexus-ide-ui/p-bb1809cb.entry.js +0 -1
  205. package/dist/genexus-ide-ui/p-c056d050.entry.js +0 -1
  206. package/dist/genexus-ide-ui/p-c6ad49cc.entry.js +0 -1
  207. package/dist/genexus-ide-ui/p-e1cd9135.entry.js +0 -1
  208. package/dist/genexus-ide-ui/p-f28601c2.entry.js +0 -1
@@ -0,0 +1,393 @@
1
+ import { proxyCustomElement, HTMLElement, h, forceUpdate, Host } from '@stencil/core/internal/client';
2
+ import { d as defineCustomElement$5 } from './checkbox.js';
3
+ import { d as defineCustomElement$4 } from './tree-x.js';
4
+ import { d as defineCustomElement$3 } from './tree-x-list.js';
5
+ import { d as defineCustomElement$2 } from './tree-x-list-item.js';
6
+
7
+ const treeViewCss = "gxg-tree-view{display:grid;grid-template-columns:1fr;grid-template-rows:1fr;height:100%}.tree-buttons{display:grid;grid-auto-rows:max-content;row-gap:8px}:not(.ch-tree-x-dragging-item) ch-tree-x-list-item:not([selected])::part(header):hover{background-color:#e8e8e9}.ch-tree-x-list-item--drag-enter{background-color:#eee;box-shadow:inset 0 0 1px 0px black}.ch-tree-x-list-item--drag-enter[selected]::part(header){background-color:#eee}ch-tree-x-list-item::part(header){border:1px solid transparent}ch-tree-x-list-item[selected]::part(header){background-color:#cfdee6;border-color:#0266a0}ch-tree-x-list-item.ch-tree-x-list-item--editing::part(header){background-color:rgba(207, 222, 230, 0.5);border-color:transparent}ch-tree-x-list-item:not(.ch-tree-x-list-item--editing)::part(header):focus-visible{border-color:black;z-index:1}.ch-tree-x-drag-info{padding-inline:6px;padding-block:2px;background-color:#cfdee6;border:1px solid #0266a0;border-radius:10px;font-size:8px}";
8
+
9
+ const DEFAULT_EXPANDED_VALUE = false;
10
+ const DEFAULT_INDETERMINATE_VALUE = false;
11
+ const DEFAULT_LAZY_VALUE = false;
12
+ const DEFAULT_SELECTED_VALUE = false;
13
+ const ChTestTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
14
+ constructor() {
15
+ super();
16
+ this.__registerHost();
17
+ // UI Models
18
+ this.flattenedTreeModel = new Map();
19
+ this.selectedItems = new Set();
20
+ this.flattenedLazyTreeModel = new Map();
21
+ /**
22
+ * This property lets you specify if the tree is waiting to process the drop
23
+ * of items.
24
+ */
25
+ this.waitDropProcessing = false;
26
+ /**
27
+ * This property lets you define the model of the ch-tree-x control.
28
+ */
29
+ this.treeModel = { items: [] };
30
+ /**
31
+ * Set this attribute if you want to allow multi selection of the items.
32
+ */
33
+ this.multiSelection = false;
34
+ /**
35
+ * `true` to display the relation between tree items and tree lists using
36
+ * lines.
37
+ */
38
+ this.showLines = "none";
39
+ this.handleDroppableZoneEnter = (event) => {
40
+ const dropInformation = event.detail;
41
+ if (!this.checkDroppableZoneCallback) {
42
+ return;
43
+ }
44
+ const requestTimestamp = new Date().getTime();
45
+ const promise = this.checkDroppableZoneCallback(dropInformation);
46
+ promise.then((validDrop) => {
47
+ this.treeRef.updateValidDroppableZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, validDrop);
48
+ });
49
+ };
50
+ this.handleSelectedItemsChange = (event) => {
51
+ const itemsToProcess = new Map(event.detail);
52
+ // Remove no longer selected items
53
+ this.selectedItems.forEach((selectedItemId) => {
54
+ const itemUIModel = this.flattenedTreeModel.get(selectedItemId).item;
55
+ const itemIsStillSelected = itemsToProcess.get(selectedItemId);
56
+ // The item does not need to be added. Remove it from the processed list
57
+ if (itemIsStillSelected) {
58
+ itemUIModel.expanded = itemIsStillSelected.expanded; // Update expanded state
59
+ itemsToProcess.delete(selectedItemId);
60
+ }
61
+ // The item must be un-selected in the UI Model
62
+ else {
63
+ itemUIModel.selected = false;
64
+ this.selectedItems.delete(selectedItemId);
65
+ }
66
+ });
67
+ // Add new selected items
68
+ itemsToProcess.forEach((newSelectedItemInfo, itemId) => {
69
+ const newSelectedItem = this.flattenedTreeModel.get(itemId).item;
70
+ newSelectedItem.selected = true;
71
+ newSelectedItem.expanded = newSelectedItemInfo.expanded;
72
+ this.selectedItems.add(itemId);
73
+ });
74
+ };
75
+ this.handleExpandedItemChange = (event) => {
76
+ const detail = event.detail;
77
+ const itemInfo = this.flattenedTreeModel.get(detail.id).item;
78
+ itemInfo.expanded = detail.expanded;
79
+ };
80
+ this.handleItemsDropped = (event) => {
81
+ const dataTransferInfo = event.detail;
82
+ const newContainer = dataTransferInfo.newContainer;
83
+ const newParentId = newContainer.id;
84
+ // Check if the parent exists in the UI Model
85
+ if (!this.flattenedTreeModel.get(newParentId)) {
86
+ return;
87
+ }
88
+ const draggedItems = dataTransferInfo.draggedItems;
89
+ if (draggedItems.length === 0 || !this.dropItemsCallback) {
90
+ return;
91
+ }
92
+ const promise = this.dropItemsCallback(dataTransferInfo);
93
+ this.waitDropProcessing = true;
94
+ promise.then((response) => {
95
+ this.waitDropProcessing = false;
96
+ if (!response.acceptDrop) {
97
+ return;
98
+ }
99
+ const newParentUIModel = this.flattenedTreeModel.get(newParentId).item;
100
+ // Only move the items to the new parent, keeping the state
101
+ if (dataTransferInfo.dropInTheSameTree) {
102
+ // Add the UI models to the new container and remove the UI models from
103
+ // the old containers
104
+ draggedItems.forEach(this.moveItemToNewParent(newParentUIModel));
105
+ }
106
+ // Add the new items
107
+ else {
108
+ if (response.items == null) {
109
+ return;
110
+ }
111
+ // Add new items to the parent
112
+ newParentUIModel.items.push(...response.items);
113
+ // Flatten the new UI models
114
+ response.items.forEach(this.flattenItemUIModel(newParentUIModel));
115
+ }
116
+ this.sortItems(newParentUIModel.items);
117
+ // Open the item to visualize the new subitems
118
+ newParentUIModel.expanded = true;
119
+ // There is no need to force and update, since the waitDropProcessing
120
+ // prop was modified
121
+ });
122
+ };
123
+ this.moveItemToNewParent = (newParentUIModel) => (dataTransferInfo) => {
124
+ const itemUIModelExtended = this.flattenedTreeModel.get(dataTransferInfo.id);
125
+ const item = itemUIModelExtended.item;
126
+ const oldParentItem = itemUIModelExtended.parentItem;
127
+ // Remove the UI model from the previous parent
128
+ oldParentItem.items.splice(oldParentItem.items.indexOf(item), 1);
129
+ // Add the UI Model to the new parent
130
+ newParentUIModel.items.push(item);
131
+ // Reference the new parent in the item
132
+ itemUIModelExtended.parentItem = newParentUIModel;
133
+ };
134
+ this.renderSubModel = (treeSubModel) => (h("ch-tree-x-list-item", { id: treeSubModel.id, caption: treeSubModel.caption, checkbox: treeSubModel.checkbox, checked: treeSubModel.checked, class: treeSubModel.class, disabled: treeSubModel.disabled, expanded: treeSubModel.expanded, indeterminate: treeSubModel.indeterminate, lazyLoad: treeSubModel.lazy, leaf: treeSubModel.leaf, leftImgSrc: treeSubModel.leftImgSrc, metadata: treeSubModel.metadata, rightImgSrc: treeSubModel.rightImgSrc, selected: treeSubModel.selected, showExpandableButton: treeSubModel.showExpandableButton, toggleCheckboxes: treeSubModel.toggleCheckboxes }, !treeSubModel.leaf &&
135
+ treeSubModel.items != null &&
136
+ treeSubModel.items.length !== 0 && (h("ch-tree-x-list", { slot: "tree" }, treeSubModel.items.map(this.renderSubModel)))));
137
+ this.flattenItemUIModel = (parentModel) => (item) => {
138
+ this.flattenedTreeModel.set(item.id, {
139
+ parentItem: parentModel,
140
+ item: item,
141
+ });
142
+ // Make sure the properties are with their default values to avoid issues
143
+ // when reusing DOM nodes
144
+ item.expanded =
145
+ item.expanded == null ? DEFAULT_EXPANDED_VALUE : item.expanded;
146
+ item.indeterminate =
147
+ item.indeterminate == null
148
+ ? DEFAULT_INDETERMINATE_VALUE
149
+ : item.indeterminate;
150
+ item.lazy = item.lazy == null ? DEFAULT_LAZY_VALUE : item.lazy;
151
+ item.selected =
152
+ item.selected == null ? DEFAULT_SELECTED_VALUE : item.selected;
153
+ if (item.lazy) {
154
+ this.flattenedLazyTreeModel.set(item.id, item);
155
+ }
156
+ if (item.selected) {
157
+ this.selectedItems.add(item.id);
158
+ }
159
+ this.flattenSubModel(item);
160
+ };
161
+ }
162
+ handleTreeModelChange() {
163
+ this.flattenModel();
164
+ }
165
+ /**
166
+ * Given an item id, it displays and scrolls into the item view.
167
+ */
168
+ async scrollIntoVisible(treeItemId) {
169
+ const itemUIModel = this.flattenedTreeModel.get(treeItemId);
170
+ if (!itemUIModel) {
171
+ // @todo Check if the item is on the server?
172
+ return;
173
+ }
174
+ let visitedNode = itemUIModel.parentItem;
175
+ // While the parent is not the root, update the UI Models
176
+ while (visitedNode && visitedNode.id != null) {
177
+ // Expand the item
178
+ visitedNode.expanded = true;
179
+ const visitedNodeUIModel = this.flattenedTreeModel.get(visitedNode.id);
180
+ visitedNode = visitedNodeUIModel.parentItem;
181
+ }
182
+ forceUpdate(this);
183
+ // @todo For some reason, when the model is created using the "big model" option,
184
+ // this implementation does not work when only the UI Model is updated. So, to
185
+ // expand the items, we have to delegate the responsibility to the tree-x
186
+ this.treeRef.scrollIntoVisible(treeItemId);
187
+ }
188
+ /**
189
+ * This method is used to toggle a tree item by the tree item id/ids.
190
+ *
191
+ * @param treeItemIds An array id the tree items to be toggled.
192
+ * @param expand A boolean indicating that the tree item should be expanded or collapsed. (optional)
193
+ * @returns The modified items after the method was called.
194
+ */
195
+ async toggleItems(treeItemIds, expand) {
196
+ if (!treeItemIds) {
197
+ return [];
198
+ }
199
+ const modifiedTreeItems = [];
200
+ treeItemIds.forEach((treeItemId) => {
201
+ const itemInfo = this.flattenedTreeModel.get(treeItemId).item;
202
+ if (itemInfo) {
203
+ itemInfo.expanded = expand !== null && expand !== void 0 ? expand : !itemInfo.expanded;
204
+ modifiedTreeItems.push({
205
+ id: itemInfo.id,
206
+ expanded: itemInfo.expanded,
207
+ });
208
+ }
209
+ });
210
+ // Force re-render
211
+ forceUpdate(this);
212
+ return modifiedTreeItems;
213
+ }
214
+ /**
215
+ * Given a subset of item's properties, it updates all item UI models.
216
+ */
217
+ async updateAllItemsProperties(properties) {
218
+ [...this.flattenedTreeModel.values()].forEach((itemUIModel) => {
219
+ if (properties.expanded != null) {
220
+ itemUIModel.item.expanded = properties.expanded;
221
+ }
222
+ if (properties.checked != null) {
223
+ itemUIModel.item.checked = properties.checked;
224
+ itemUIModel.item.indeterminate = false;
225
+ }
226
+ });
227
+ forceUpdate(this);
228
+ }
229
+ /**
230
+ * Given a item list and the properties to update, it updates the properties
231
+ * of the items in the list.
232
+ */
233
+ async updateItemsProperties(items, properties) {
234
+ items.forEach((item) => {
235
+ const itemUIModel = this.flattenedTreeModel.get(item);
236
+ this.updateItemProperty(itemUIModel, properties);
237
+ });
238
+ forceUpdate(this);
239
+ }
240
+ updateItemProperty(itemUIModel, properties) {
241
+ if (!itemUIModel) {
242
+ return;
243
+ }
244
+ const itemInfo = itemUIModel.item;
245
+ Object.keys(properties).forEach((propertyName) => {
246
+ itemInfo[propertyName] = properties[propertyName];
247
+ });
248
+ }
249
+ loadLazyChildrenHandler(event) {
250
+ event.stopPropagation();
251
+ const treeItemId = event.detail;
252
+ if (this.lazyLoadTreeItemsCallback) {
253
+ const promise = this.lazyLoadTreeItemsCallback(treeItemId);
254
+ const itemRef = event.target;
255
+ itemRef.downloading = true;
256
+ promise.then((result) => {
257
+ const itemToLazyLoadContent = this.flattenedLazyTreeModel.get(treeItemId);
258
+ // Establish that the content was lazy loaded
259
+ this.flattenedLazyTreeModel.delete(treeItemId);
260
+ itemToLazyLoadContent.lazy = false;
261
+ itemRef.downloading = false;
262
+ // Check if there is items to add
263
+ if (result == null) {
264
+ return;
265
+ }
266
+ // @todo What happens in the server when dropping items on a lazy node?
267
+ itemToLazyLoadContent.items = result;
268
+ this.sortItems(itemToLazyLoadContent.items);
269
+ this.flattenSubModel(itemToLazyLoadContent);
270
+ // Force re-render
271
+ forceUpdate(this);
272
+ });
273
+ }
274
+ }
275
+ handleCaptionModification(event) {
276
+ event.stopPropagation();
277
+ if (!this.modifyItemCaptionCallback) {
278
+ return;
279
+ }
280
+ const itemRef = event.target;
281
+ const itemId = event.detail.id;
282
+ const itemUIModel = this.flattenedTreeModel.get(itemId);
283
+ const itemInfo = itemUIModel.item;
284
+ const newCaption = event.detail.caption;
285
+ const oldCaption = itemInfo.caption;
286
+ // Optimistic UI: Update the caption in the UI Model before the change is
287
+ // completed in the server
288
+ itemInfo.caption = newCaption;
289
+ // Due to performance reasons, we don't make a shallow copy of the
290
+ // treeModel to force a re-render
291
+ itemRef.caption = newCaption;
292
+ const promise = this.modifyItemCaptionCallback(itemId, newCaption);
293
+ promise.then((status) => {
294
+ if (status.success) {
295
+ this.sortItems(itemUIModel.parentItem.items);
296
+ // Force re-render
297
+ forceUpdate(this);
298
+ }
299
+ else {
300
+ itemRef.caption = oldCaption;
301
+ itemInfo.caption = oldCaption;
302
+ // Do something with the error message
303
+ }
304
+ });
305
+ }
306
+ flattenSubModel(model) {
307
+ const items = model.items;
308
+ if (!items) {
309
+ // Make sure that subtrees don't have an undefined array
310
+ if (model.leaf === false) {
311
+ model.items = [];
312
+ }
313
+ return;
314
+ }
315
+ this.sortItems(items);
316
+ items.forEach(this.flattenItemUIModel(model));
317
+ }
318
+ sortItems(items) {
319
+ // Ensure that items are sorted
320
+ if (this.sortItemsCallback) {
321
+ this.sortItemsCallback(items);
322
+ }
323
+ }
324
+ flattenModel() {
325
+ this.flattenedTreeModel.clear();
326
+ this.flattenedLazyTreeModel.clear();
327
+ this.flattenSubModel(this.treeModel);
328
+ }
329
+ componentWillLoad() {
330
+ this.flattenModel();
331
+ }
332
+ render() {
333
+ return (h(Host, null, h("ch-tree-x", { multiSelection: this.multiSelection,
334
+ // showLines={this.showLines}
335
+ waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.handleDroppableZoneEnter, onExpandedItemChange: this.handleExpandedItemChange, onItemsDropped: this.handleItemsDropped, onSelectedItemsChange: this.handleSelectedItemsChange, ref: (el) => (this.treeRef = el) }, h("ch-tree-x-list", null, this.treeModel.items.map(this.renderSubModel))), h("div", { class: "tree-buttons" })));
336
+ }
337
+ static get watchers() { return {
338
+ "treeModel": ["handleTreeModelChange"]
339
+ }; }
340
+ static get style() { return treeViewCss; }
341
+ }, [0, "gxg-tree-view", {
342
+ "checkDroppableZoneCallback": [16],
343
+ "dropItemsCallback": [16],
344
+ "treeModel": [1040],
345
+ "lazyLoadTreeItemsCallback": [16],
346
+ "modifyItemCaptionCallback": [16],
347
+ "multiSelection": [1028, "multi-selection"],
348
+ "showLines": [1025, "show-lines"],
349
+ "sortItemsCallback": [16],
350
+ "waitDropProcessing": [32],
351
+ "scrollIntoVisible": [64],
352
+ "toggleItems": [64],
353
+ "updateAllItemsProperties": [64],
354
+ "updateItemsProperties": [64]
355
+ }, [[0, "loadLazyContent", "loadLazyChildrenHandler"], [0, "modifyCaption", "handleCaptionModification"]]]);
356
+ function defineCustomElement$1() {
357
+ if (typeof customElements === "undefined") {
358
+ return;
359
+ }
360
+ const components = ["gxg-tree-view", "ch-checkbox", "ch-tree-x", "ch-tree-x-list", "ch-tree-x-list-item"];
361
+ components.forEach(tagName => { switch (tagName) {
362
+ case "gxg-tree-view":
363
+ if (!customElements.get(tagName)) {
364
+ customElements.define(tagName, ChTestTreeX);
365
+ }
366
+ break;
367
+ case "ch-checkbox":
368
+ if (!customElements.get(tagName)) {
369
+ defineCustomElement$5();
370
+ }
371
+ break;
372
+ case "ch-tree-x":
373
+ if (!customElements.get(tagName)) {
374
+ defineCustomElement$4();
375
+ }
376
+ break;
377
+ case "ch-tree-x-list":
378
+ if (!customElements.get(tagName)) {
379
+ defineCustomElement$3();
380
+ }
381
+ break;
382
+ case "ch-tree-x-list-item":
383
+ if (!customElements.get(tagName)) {
384
+ defineCustomElement$2();
385
+ }
386
+ break;
387
+ } });
388
+ }
389
+
390
+ const GxgTreeView = ChTestTreeX;
391
+ const defineCustomElement = defineCustomElement$1;
392
+
393
+ export { GxgTreeView, defineCustomElement };
@@ -18,5 +18,14 @@ var MouseEventButtons;
18
18
  MouseEventButtons[MouseEventButtons["BACK"] = 8] = "BACK";
19
19
  MouseEventButtons[MouseEventButtons["FORWARD"] = 16] = "FORWARD";
20
20
  })(MouseEventButtons || (MouseEventButtons = {}));
21
+ function focusComposedPath() {
22
+ const composedPath = [];
23
+ let root = document;
24
+ while (root && root.activeElement) {
25
+ composedPath.push(root.activeElement);
26
+ root = root.activeElement.shadowRoot;
27
+ }
28
+ return composedPath.reverse();
29
+ }
21
30
 
22
- export { MouseEventButton as M, mouseEventHasButtonPressed as a, MouseEventButtons as b, mouseEventModifierKey as m };
31
+ export { MouseEventButton as M, mouseEventHasButtonPressed as a, MouseEventButtons as b, focusComposedPath as f, mouseEventModifierKey as m };
@@ -18,6 +18,7 @@ export { ChGridColumnDisplay, defineCustomElement as defineCustomElementChGridCo
18
18
  export { ChGridColumnResize, defineCustomElement as defineCustomElementChGridColumnResize } from './ch-grid-column-resize.js';
19
19
  export { ChGridColumnSettings, defineCustomElement as defineCustomElementChGridColumnSettings } from './ch-grid-column-settings.js';
20
20
  export { ChGridColumnset, defineCustomElement as defineCustomElementChGridColumnset } from './ch-grid-columnset.js';
21
+ export { ChGridInfiniteScroll, defineCustomElement as defineCustomElementChGridInfiniteScroll } from './ch-grid-infinite-scroll.js';
21
22
  export { ChGridRowActions, defineCustomElement as defineCustomElementChGridRowActions } from './ch-grid-row-actions.js';
22
23
  export { ChGridRowsetEmpty, defineCustomElement as defineCustomElementChGridRowsetEmpty } from './ch-grid-rowset-empty.js';
23
24
  export { ChGridRowsetLegend, defineCustomElement as defineCustomElementChGridRowsetLegend } from './ch-grid-rowset-legend.js';
@@ -158,6 +159,7 @@ export { GxgTooltip, defineCustomElement as defineCustomElementGxgTooltip } from
158
159
  export { GxgTree, defineCustomElement as defineCustomElementGxgTree } from './gxg-tree.js';
159
160
  export { GxgTreeGridDivs, defineCustomElement as defineCustomElementGxgTreeGridDivs } from './gxg-tree-grid-divs.js';
160
161
  export { GxgTreeItem, defineCustomElement as defineCustomElementGxgTreeItem } from './gxg-tree-item.js';
162
+ export { GxgTreeView, defineCustomElement as defineCustomElementGxgTreeView } from './gxg-tree-view.js';
161
163
  export { GxgWindow, defineCustomElement as defineCustomElementGxgWindow } from './gxg-window.js';
162
164
 
163
165
  function appGlobalScript () {
@@ -8,7 +8,7 @@ import { d as defineCustomElement$3 } from './icon2.js';
8
8
  import { d as defineCustomElement$2 } from './gxg-label2.js';
9
9
  import { d as defineCustomElement$1 } from './tooltip.js';
10
10
 
11
- const listBoxItemCss = ":host(.gxg--disabled) .form-element,:host(.gxg--disabled.form-element){pointer-events:none;background-color:var(--color-background-disabled) !important;color:var(--color-on-background--disabled) !important;border-color:var(--gxg-border-color--disabled) !important;cursor:default !important}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host{display:block;font-family:var(--font-family-primary);font-size:inherit;color:inherit;display:flex;box-sizing:border-box;align-items:center;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-o-user-select:none;outline:none}:host .container{display:flex;align-items:center;padding:var(--spacing-comp-00) var(--spacing-comp-02);width:100%;height:var(--gxg-list-item-height--spaced);box-sizing:border-box}:host .icon{margin-inline-end:var(--spacing-comp-01);flex-shrink:0}:host gxg-form-checkbox{margin-inline-end:var(--spacing-comp-01)}:host gxg-form-checkbox::part(box){outline:none}:host(:not([disabled])){cursor:pointer !important}:host(:hover:not([selected])){background-color:var(--gxg-background-color-item-hover)}:host(.has-icon.no-checkbox) .container{padding-inline-start:var(--spacing-comp-01)}.description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;}:host([highlighted]){background-color:var(--gxg-background-color-item-selected);color:var(--color-on-background)}:host([selected]){background-color:var(--gxg-background-color-item-active);color:var(--gxg-color-item-active)}:host(.large) .container{padding:var(--spacing-comp-01)}";
11
+ const listBoxItemCss = ":host(.gxg--disabled) .form-element,:host(.gxg--disabled.form-element){pointer-events:none;background-color:var(--gxg-background-color--disabled) !important;color:var(--gxg-color--disabled) !important;border-color:var(--gxg-border-color--disabled) !important;cursor:default !important}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:6px;height:6px}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}:host{display:block;font-family:var(--font-family-primary);font-size:inherit;color:inherit;display:flex;box-sizing:border-box;align-items:center;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-o-user-select:none;outline:none;border-bottom:1px solid transparent}:host .container{display:flex;align-items:center;padding:var(--spacing-comp-00) var(--spacing-comp-02);width:100%;height:var(--gxg-list-item-height--spaced);box-sizing:border-box}:host .icon{margin-inline-end:var(--spacing-comp-01);flex-shrink:0}:host gxg-form-checkbox{margin-inline-end:var(--spacing-comp-01)}:host gxg-form-checkbox::part(box){outline:none}:host(:not([disabled])){cursor:pointer !important}:host([disabled]){pointer-events:none}:host(:hover:not([selected])){background-color:var(--gxg-background-color--hover)}:host(.has-icon.no-checkbox) .container{padding-inline-start:var(--spacing-comp-01)}.description{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;}:host([active]){outline-style:solid;outline-color:var(--gxg-border-color--focused);outline-width:var(--border-width-md);outline-offset:-2px;background-color:var(--gxg-background-color--hover);color:var(--gxg-color--hover)}:host([selected]){background-color:var(--gxg-background-color--selected);color:var(--gxg-color--selected);border-bottom-color:var(--color-secondary-hover)}:host([selected]:hover){background-color:var(--gxg-background-color--selected-hover)}:host(:not([sibling-is-selected])){border-bottom-color:transparent}:host(.large) .container{padding:var(--spacing-comp-01)}";
12
12
 
13
13
  const GxgListboxItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
14
14
  constructor() {
@@ -30,6 +30,10 @@ const GxgListboxItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
30
30
  * The presence of this attribute sets this item as selected
31
31
  */
32
32
  this.selected = false;
33
+ /**
34
+ * This property is for internal use
35
+ */
36
+ this.siblingIsSelected = false;
33
37
  /**
34
38
  * The presence of this attribute sets this item as highlighted
35
39
  */
@@ -71,19 +75,9 @@ const GxgListboxItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
71
75
  const exportPartsResult = exportParts(part, this.parts);
72
76
  exportPartsResult.length && (this.exportparts = exportPartsResult);
73
77
  };
74
- this.getIndex = () => {
75
- const listBox = this.el.parentElement;
76
- const listBoxItems = listBox.querySelectorAll("gxg-list-box-item");
77
- const itemIndex = Array.from(listBoxItems).findIndex((item) => {
78
- return item === this.el;
79
- });
80
- if (itemIndex !== -1) {
81
- return itemIndex;
82
- }
83
- else {
84
- return undefined;
85
- }
86
- };
78
+ }
79
+ watchPropHandler() {
80
+ this.itemSelected.emit();
87
81
  }
88
82
  checkboxChangedHandler(e) {
89
83
  const checked = e.detail.value;
@@ -97,8 +91,8 @@ const GxgListboxItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
97
91
  if (this.disabled) {
98
92
  return "disabled";
99
93
  }
100
- else if (this.selected || this.highlighted || this.mouseOver) {
101
- return "negative";
94
+ else if (this.selected) {
95
+ return "primary-enabled";
102
96
  }
103
97
  else {
104
98
  return "auto";
@@ -111,13 +105,12 @@ const GxgListboxItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
111
105
  this.itemLoaded.emit();
112
106
  }
113
107
  itemClickedFunc(e) {
114
- const index = this.getIndex();
115
108
  this.itemClicked.emit({
116
109
  clickedItem: this.el,
117
110
  ctrlKey: e.ctrlKey,
118
111
  cmdKey: e.metaKey,
119
112
  shiftKey: e.shiftKey,
120
- index: index,
113
+ index: this.index,
121
114
  });
122
115
  }
123
116
  onMouseOver() {
@@ -138,11 +131,15 @@ const GxgListboxItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
138
131
  exportParts: this.exportparts ? this.exportparts : null }, h("div", { class: { container: true, "form-element": true } }, this.checkbox && !this.disabled ? (h("gxg-form-checkbox", { tabindex: "-1", checked: this.checked, onClick: this.handleCheckboxClick, disabled: this.disabled, part: this.parts.checkbox })) : null, this.icon !== undefined ? (h("gxg-icon", { class: "icon", color: this.iconColor(), size: "regular", type: this.icon })) : null, h("div", { class: "description" }, h("slot", null)))));
139
132
  }
140
133
  get el() { return this; }
134
+ static get watchers() { return {
135
+ "selected": ["watchPropHandler"]
136
+ }; }
141
137
  static get style() { return listBoxItemCss; }
142
138
  }, [1, "gxg-list-box-item", {
143
139
  "disabled": [516],
144
140
  "icon": [1],
145
141
  "selected": [516],
142
+ "siblingIsSelected": [516, "sibling-is-selected"],
146
143
  "highlighted": [516],
147
144
  "active": [516],
148
145
  "index": [514],