@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
@@ -2,10 +2,6 @@ import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal
2
2
 
3
3
  const treeXListCss = ":host{display:grid;grid-auto-rows:min-content;position:relative;width:100%}";
4
4
 
5
- /**
6
- * This variable specifies a reference to the main ch-tree-x element
7
- */
8
- let mainTreeRef;
9
5
  const ChTreeListX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
10
6
  constructor() {
11
7
  super();
@@ -15,59 +11,14 @@ const ChTreeListX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
15
11
  * Level in the tree at which the control is placed.
16
12
  */
17
13
  this.level = 0;
18
- /**
19
- * `true` to display the relation between tree items and tree lists using
20
- * lines.
21
- */
22
- this.showLines = "none";
23
- this.updateLastItemDashedLine = () => {
24
- // @todo WA to avoid StencilJS' bug. The showLines Watch is dispatched
25
- // before the componentDidLoad lifecycle method completes
26
- if (!this.slotRef) {
27
- return;
28
- }
29
- const treeItems = this.slotRef.assignedElements();
30
- if (treeItems.length === 0) {
31
- return;
32
- }
33
- const lastItemIndex = treeItems.length - 1;
34
- for (let i = 0; i < lastItemIndex; i++) {
35
- treeItems[i].lastItem = false;
36
- }
37
- treeItems[lastItemIndex].lastItem = true;
38
- };
39
- }
40
- handleShowLinesChange(newValue) {
41
- // Displayed items may have changed since the last time that `showLines === true`
42
- if (newValue !== "none" && this.level !== 0) {
43
- this.updateLastItemDashedLine();
44
- }
45
- }
46
- componentWillLoad() {
47
- // Set tree level
48
- const parentElement = this.el.parentElement;
49
- // Set item level
50
- this.level = parentElement.level + 1;
51
- // If the mainTreeRef is not defined, the first item that will load this
52
- // reference will be the top tree-x-list
53
- if (!mainTreeRef) {
54
- mainTreeRef = parentElement;
55
- }
56
- this.showLines = mainTreeRef.showLines;
57
14
  }
58
15
  render() {
59
- return (h(Host, { role: this.level === 0 ? "tree" : "group" }, h("slot", { onSlotchange: this.showLines !== "none" && this.level !== 0
60
- ? this.updateLastItemDashedLine
61
- : null, ref: el => (this.slotRef = el) })));
16
+ return (h(Host, { role: this.level === 0 ? "tree" : "group" }, h("slot", null)));
62
17
  }
63
18
  get el() { return this; }
64
- static get watchers() { return {
65
- "showLines": ["handleShowLinesChange"]
66
- }; }
67
19
  static get style() { return treeXListCss; }
68
20
  }, [1, "ch-tree-x-list", {
69
- "level": [1026],
70
- "showLines": [1025, "show-lines"]
21
+ "level": [2]
71
22
  }]);
72
23
  function defineCustomElement() {
73
24
  if (typeof customElements === "undefined") {
@@ -18,9 +18,8 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
18
18
  const treeXCss = "ch-tree-x{display:flex;position:relative;overflow:auto}ch-tree-x>ch-tree-x-list{position:absolute;inset:0;min-width:max-content}ch-tree-x.ch-tree-x-dragging-item ch-tree-x-list-item{pointer-events:var(--ch-tree-x-pointer-events, all)}ch-tree-x.ch-tree-x-dragging-item .ch-tree-x-list-item--deny-drop,ch-tree-x.ch-tree-x-dragging-item ch-tree-x-list{pointer-events:none}ch-tree-x.ch-tree-x--dragging-selected-items ch-tree-x-list-item[selected]{--ch-tree-x-pointer-events:none}ch-tree-x.ch-tree-x-waiting-drop-processing{cursor:wait}ch-tree-x.ch-tree-x-waiting-drop-processing>ch-tree-x-list{pointer-events:none}.ch-tree-x-drag-info{--rtl-offset:16px;position:fixed;left:0;top:0;transform:translate(calc(var(--ch-tree-x-dragging-item-x) + var(--rtl-offset)), calc(var(--ch-tree-x-dragging-item-y) + 8px));pointer-events:none;z-index:1;animation:ch-tree-x-drag-info-fade-in 10ms}@keyframes ch-tree-x-drag-info-fade-in{0%,100%{opacity:0}}html[dir=rtl] .ch-tree-x-drag-info{--rtl-offset:-100%}";
19
19
 
20
20
  const TREE_ITEM_TAG_NAME = "ch-tree-x-list-item";
21
- const TREE_LIST_TAG_NAME = "ch-tree-x-list";
21
+ const TREE_TAG_NAME = "ch-tree-x";
22
22
  // Selectors
23
- const TREE_LIST_AND_ITEM_SELECTOR = TREE_LIST_TAG_NAME + "," + TREE_ITEM_TAG_NAME;
24
23
  // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
25
24
  const TEXT_FORMAT = "text/plain";
26
25
  const ARROW_DOWN_KEY = "ArrowDown";
@@ -77,10 +76,6 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
77
76
  this.draggedParentIds = [];
78
77
  this.draggingInTheDocument = false;
79
78
  this.draggingInTree = false;
80
- /**
81
- * Level in the tree at which the control is placed.
82
- */
83
- this.level = -1;
84
79
  /**
85
80
  * Set this attribute if you want to allow multi selection of the items.
86
81
  */
@@ -95,11 +90,6 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
95
90
  * tree.
96
91
  */
97
92
  this.scrollToEdgeOnDrag = true;
98
- /**
99
- * `true` to display the relation between tree items and tree lists using
100
- * lines.
101
- */
102
- this.showLines = "none";
103
93
  /**
104
94
  * This property lets you specify if the tree is waiting to process the drop
105
95
  * of items.
@@ -108,6 +98,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
108
98
  this.trackItemDrag = (event) => {
109
99
  event.preventDefault();
110
100
  this.lastDragEvent = event;
101
+ this.updateDropEffect(event);
111
102
  if (!this.needForRAF) {
112
103
  return;
113
104
  }
@@ -127,57 +118,6 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
127
118
  requestAnimationFrame(this.fixScrollPositionOnDrag);
128
119
  });
129
120
  };
130
- this.handleKeyDownEvents = (event) => {
131
- const keyHandler = this.keyDownEvents[event.key];
132
- if (keyHandler) {
133
- keyHandler(event);
134
- }
135
- };
136
- }
137
- handleShowLinesChange(newShowLines) {
138
- const treeItems = this.el.querySelectorAll(TREE_LIST_AND_ITEM_SELECTOR);
139
- treeItems.forEach(item => {
140
- item.showLines = newShowLines;
141
- });
142
- }
143
- /**
144
- * Given an item id, it displays and scrolls into the item view.
145
- */
146
- async scrollIntoVisible(treeItemId) {
147
- const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME}#${treeItemId}`);
148
- if (!itemRef) {
149
- return;
150
- }
151
- let parentItem = itemRef.parentElement.parentElement;
152
- // Expand all parents
153
- while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
154
- parentItem.expanded = true;
155
- parentItem = parentItem.parentElement.parentElement;
156
- }
157
- // Wait until the parents are expanded
158
- requestAnimationFrame(() => {
159
- itemRef.scrollIntoView();
160
- });
161
- }
162
- /**
163
- * Update the information about the valid droppable zones.
164
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
165
- * @param newContainerId ID of the container where the drag is trying to be made.
166
- * @param draggedItems Information about the dragged items.
167
- * @param validDrop Current state of the droppable zone.
168
- */
169
- async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
170
- var _a;
171
- if (!this.draggingInTheDocument ||
172
- requestTimestamp <= this.dragStartTimestamp) {
173
- return;
174
- }
175
- const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
176
- this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
177
- const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
178
- if (shouldUpdateDragEnterInCurrentContainer) {
179
- this.lastOpenSubTreeItem.dragState = "enter";
180
- }
181
121
  }
182
122
  // /**
183
123
  // * Returns an array of the selected tree items, providing the id, caption and
@@ -194,6 +134,13 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
194
134
  // selected: item.selected
195
135
  // }));
196
136
  // }
137
+ // Set edit mode in items
138
+ handleKeyDownEvents(event) {
139
+ const keyHandler = this.keyDownEvents[event.key];
140
+ if (keyHandler) {
141
+ keyHandler(event);
142
+ }
143
+ }
197
144
  // We can't use capture, because the dataTransfer info would not be defined
198
145
  // Also, we cant use capture and setTimeout with 0 seconds, because the
199
146
  // getData method can only be accessed during the dragstart and drop event
@@ -248,6 +195,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
248
195
  }
249
196
  this.itemsDropped.emit({
250
197
  newContainer: { id: newContainer.id, metadata: newContainer.metadata },
198
+ draggingSelectedItems: this.draggingSelectedItems,
251
199
  draggedItems: draggedItems,
252
200
  dropInTheSameTree: this.draggingInTree
253
201
  });
@@ -257,7 +205,13 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
257
205
  capture: true
258
206
  });
259
207
  this.currentDraggedItem = event.target;
260
- this.updateDragInfo(event.detail);
208
+ const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
209
+ if (!allItemsCanBeDragged) {
210
+ // This effect disables drop interactions in all page elements, so there
211
+ // is no need to capture and prevent the drop event in the window
212
+ event.detail.dragEvent.dataTransfer.effectAllowed = "none";
213
+ return;
214
+ }
261
215
  this.draggingInTree = true;
262
216
  if (this.scrollToEdgeOnDrag) {
263
217
  this.fixScrollPositionOnDrag();
@@ -271,26 +225,94 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
271
225
  // Reset not allowed droppable ids
272
226
  this.resetVariables();
273
227
  }
228
+ /**
229
+ * Only sync the info about the selected items. It does not update the state
230
+ * of the previous selected items.
231
+ */
232
+ handleSelectedItemSync(event) {
233
+ event.stopPropagation();
234
+ const selectedItemInfo = event.detail;
235
+ // If the item is selected, add it to list
236
+ if (selectedItemInfo.selected) {
237
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
238
+ }
239
+ else {
240
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
241
+ }
242
+ }
274
243
  handleSelectedItemChange(event) {
275
244
  event.stopPropagation();
276
245
  const selectedItemInfo = event.detail;
277
246
  const selectedItemEl = event.target;
278
247
  this.handleItemSelection(selectedItemEl, selectedItemInfo);
279
248
  }
249
+ /**
250
+ * Clear all information about the selected items. This method is intended to
251
+ * be used when selected items are reordered and the selected references will
252
+ * no longer be useful.
253
+ */
254
+ async clearSelectedItemsInfo() {
255
+ this.clearSelectedItems();
256
+ }
257
+ /**
258
+ * Given an item id, it displays and scrolls into the item view.
259
+ */
260
+ async scrollIntoVisible(treeItemId) {
261
+ const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME}#${treeItemId}`);
262
+ if (!itemRef) {
263
+ return;
264
+ }
265
+ let parentItem = itemRef.parentElement.parentElement;
266
+ // Expand all parents
267
+ while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
268
+ parentItem.expanded = true;
269
+ parentItem = parentItem.parentElement.parentElement;
270
+ }
271
+ // Wait until the parents are expanded
272
+ requestAnimationFrame(() => {
273
+ itemRef.scrollIntoView();
274
+ });
275
+ }
276
+ /**
277
+ * Update the information about the valid droppable zones.
278
+ * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
279
+ * @param newContainerId ID of the container where the drag is trying to be made.
280
+ * @param draggedItems Information about the dragged items.
281
+ * @param validDrop Current state of the droppable zone.
282
+ */
283
+ async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
284
+ var _a;
285
+ if (!this.draggingInTheDocument ||
286
+ requestTimestamp <= this.dragStartTimestamp) {
287
+ return;
288
+ }
289
+ const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
290
+ this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
291
+ const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
292
+ if (shouldUpdateDragEnterInCurrentContainer) {
293
+ this.lastOpenSubTreeItem.dragState = "enter";
294
+ }
295
+ }
280
296
  validDroppableZone(event) {
281
297
  const containerTarget = event.target;
282
- // When dragging in the same tree, don't mark droppable zones if they are
283
- // the dragged items or their direct parents
284
- if (this.draggingInTree &&
285
- (this.draggedIds.includes(containerTarget.id) ||
286
- this.draggedParentIds.includes(containerTarget.id))) {
287
- return "invalid";
288
- }
289
298
  const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
290
299
  const droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
291
300
  if (droppableZoneState != null) {
292
301
  return droppableZoneState;
293
302
  }
303
+ // Do not show drop zones if:
304
+ // - The effect does not allow it.
305
+ // - The drop is disabled in the container target.
306
+ // - When dragging in the same tree, don't mark droppable zones if they are
307
+ // the dragged items or their direct parents.
308
+ if (event.dataTransfer.effectAllowed === "none" ||
309
+ containerTarget.dropDisabled ||
310
+ (this.draggingInTree &&
311
+ (this.draggedIds.includes(containerTarget.id) ||
312
+ this.draggedParentIds.includes(containerTarget.id)))) {
313
+ this.validDroppableZoneCache.set(cacheKey, "invalid");
314
+ return "invalid";
315
+ }
294
316
  this.validDroppableZoneCache.set(cacheKey, "checking");
295
317
  this.droppableZoneEnter.emit({
296
318
  newContainer: {
@@ -310,25 +332,43 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
310
332
  this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
311
333
  }, this.openSubTreeCountdown);
312
334
  }
335
+ updateDropEffect(event) {
336
+ const itemTarget = event.target;
337
+ // Check if it is a valid item
338
+ if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME ||
339
+ itemTarget.closest(TREE_TAG_NAME) !== this.el) {
340
+ return;
341
+ }
342
+ const cacheKey = getDroppableZoneKey(itemTarget.id, this.draggedItems);
343
+ const droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
344
+ if (droppableZoneState === "invalid") {
345
+ event.dataTransfer.dropEffect = "none";
346
+ }
347
+ }
313
348
  resetVariables() {
314
349
  this.draggedIds = [];
315
350
  this.draggedParentIds = [];
316
351
  }
317
352
  /**
318
- * Update the dataTransfer in the drag event to store the ids and metadata of
319
- * the dragged items. Also it updates the visual information of the dragged
353
+ * First, it check if all items can be dragged. If so, it updates the
354
+ * dataTransfer in the drag event to store the ids and metadata of the
355
+ * dragged items. Also it updates the visual information of the dragged
320
356
  * items.
357
+ * @returns If all selected items can be dragged.
321
358
  */
322
- updateDragInfo(dragInfo) {
359
+ checkDragValidityAndUpdateDragInfo(dragInfo) {
323
360
  const draggedElement = dragInfo.elem;
324
361
  const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
325
362
  this.draggingSelectedItems = isDraggingSelectedItems;
326
363
  let dataTransferInfo = [];
364
+ let dragIsEnabledForAllItems;
327
365
  if (isDraggingSelectedItems) {
328
366
  const selectedItemKeys = [...this.selectedItemsInfo.keys()];
367
+ const selectedItemValues = [...this.selectedItemsInfo.values()];
329
368
  const selectedItemCount = selectedItemKeys.length;
369
+ dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
330
370
  this.draggedIds = selectedItemKeys;
331
- dataTransferInfo = [...this.selectedItemsInfo.values()].map(el => ({
371
+ dataTransferInfo = selectedItemValues.map(el => ({
332
372
  id: el.id,
333
373
  metadata: el.metadata
334
374
  }));
@@ -338,6 +378,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
338
378
  : selectedItemCount.toString();
339
379
  }
340
380
  else {
381
+ dragIsEnabledForAllItems = !draggedElement.dragDisabled;
341
382
  dataTransferInfo = [
342
383
  { id: draggedElement.id, metadata: draggedElement.metadata }
343
384
  ];
@@ -347,7 +388,11 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
347
388
  this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
348
389
  // Update drag event info
349
390
  const data = JSON.stringify(dataTransferInfo);
350
- dragInfo.dataTransfer.setData(TEXT_FORMAT, data);
391
+ dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
392
+ // We must keep the data binding and processing even if there is an item
393
+ // that can't be dragged, otherwise, other trees or element might behave
394
+ // unexpected when a dragstart event comes
395
+ return dragIsEnabledForAllItems;
351
396
  }
352
397
  getDirectParentsOfDraggableItems(draggingSelectedItems) {
353
398
  if (!draggingSelectedItems) {
@@ -370,6 +415,8 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
370
415
  // If the Control key was not pressed or multi selection is disabled,
371
416
  // remove all selected items
372
417
  if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
418
+ // Don't update the state of the selected item if no needed
419
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
373
420
  this.selectedItemsInfo.forEach(treeItem => {
374
421
  treeItem.itemRef.selected = false;
375
422
  });
@@ -381,23 +428,13 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
381
428
  if (selectedItemInfo.selected) {
382
429
  this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
383
430
  }
384
- else {
385
- this.selectedItemsInfo.delete(selectedItemInfo.id);
386
- }
387
431
  // Sync with UI model
388
432
  this.selectedItemsChange.emit(this.selectedItemsInfo);
389
433
  }
390
434
  clearSelectedItems() {
391
435
  this.selectedItemsInfo.clear();
392
436
  }
393
- connectedCallback() {
394
- // Set edit mode in items
395
- this.el.addEventListener("keydown", this.handleKeyDownEvents, {
396
- capture: true
397
- });
398
- }
399
437
  disconnectedCallback() {
400
- this.el.removeEventListener("keydown", this.handleKeyDownEvents);
401
438
  this.resetVariables();
402
439
  // Remove dragover body event
403
440
  this.handleItemDragEnd();
@@ -410,22 +447,18 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
410
447
  } }, h("slot", null), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
411
448
  }
412
449
  get el() { return this; }
413
- static get watchers() { return {
414
- "showLines": ["handleShowLinesChange"]
415
- }; }
416
450
  static get style() { return treeXCss; }
417
451
  }, [4, "ch-tree-x", {
418
- "level": [2],
419
452
  "multiSelection": [4, "multi-selection"],
420
453
  "openSubTreeCountdown": [2, "open-sub-tree-countdown"],
421
454
  "scrollToEdgeOnDrag": [4, "scroll-to-edge-on-drag"],
422
- "showLines": [1, "show-lines"],
423
455
  "waitDropProcessing": [4, "wait-drop-processing"],
424
456
  "draggingInTheDocument": [32],
425
457
  "draggingInTree": [32],
458
+ "clearSelectedItemsInfo": [64],
426
459
  "scrollIntoVisible": [64],
427
460
  "updateValidDroppableZone": [64]
428
- }, [[9, "dragstart", "handleDragStart"], [11, "dragend", "handleDragEnd"], [3, "dragenter", "handleDragEnter"], [3, "dragleave", "handleDragLeave"], [1, "drop", "handleItemDrop"], [0, "itemDragStart", "handleItemDragStart"], [0, "itemDragEnd", "handleItemDragEnd"], [0, "selectedItemChange", "handleSelectedItemChange"]]]);
461
+ }, [[2, "keydown", "handleKeyDownEvents"], [9, "dragstart", "handleDragStart"], [11, "dragend", "handleDragEnd"], [3, "dragenter", "handleDragEnter"], [3, "dragleave", "handleDragLeave"], [1, "drop", "handleItemDrop"], [0, "itemDragStart", "handleItemDragStart"], [0, "itemDragEnd", "handleItemDragEnd"], [0, "selectedItemSync", "handleSelectedItemSync"], [0, "selectedItemChange", "handleSelectedItemChange"]]]);
429
462
  function defineCustomElement() {
430
463
  if (typeof customElements === "undefined") {
431
464
  return;