@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
@@ -3,7 +3,93 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-5a32426a.js');
6
- const helpers = require('./helpers-8845f008.js');
6
+ const reserverdNames = require('./reserverd-names-1b00889a.js');
7
+ const helpers = require('./helpers-291cb1cb.js');
8
+
9
+ const checkboxCss = "*,::before,::after{box-sizing:border-box}:host{display:flex;align-items:center;align-self:stretch;outline:unset;touch-action:manipulation;user-select:none}:host(.ch-checkbox--actionable) :is(.input,.label){cursor:pointer}.container{position:relative;width:min(1em, 20px);height:min(1em, 20px);border:1px solid var(--option-border-color, #000);border-radius:18.75%}.container--checked{background-color:var(--option-checked-color, #ffffff00)}.container:focus-within{box-shadow:0 0 1px 1px #00000040}.input{display:flex;width:100%;height:100%;opacity:0;margin:0;padding:0}.option{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);width:50%;height:50%;background-color:#000;opacity:0;pointer-events:none}.option--checked{opacity:1;-webkit-mask:url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8' %3E%3Cpath fill='currentColor' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z' /%3E%3C/svg%3E\")}.option--indeterminate{opacity:1}.label{margin-inline-start:min(0.35em, 7px)}";
10
+
11
+ const CHECKBOX_ID = "checkbox";
12
+ const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
13
+ const CheckBox = class {
14
+ constructor(hostRef) {
15
+ index.registerInstance(this, hostRef);
16
+ this.click = index.createEvent(this, "click", 7);
17
+ this.input = index.createEvent(this, "input", 7);
18
+ /**
19
+ * This attribute lets you specify if the element is disabled.
20
+ * If disabled, it will not fire any user interaction related event
21
+ * (for example, click event).
22
+ */
23
+ this.disabled = false;
24
+ /**
25
+ * True to highlight control when an action is fired.
26
+ */
27
+ this.highlightable = false;
28
+ /**
29
+ * `true` if the control's value is indeterminate.
30
+ */
31
+ this.indeterminate = false;
32
+ /**
33
+ * This attribute indicates that the user cannot modify the value of the control.
34
+ * Same as [readonly](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly)
35
+ * attribute for `input` elements.
36
+ */
37
+ this.readonly = false;
38
+ this.getValue = (checked) => checked ? this.checkedValue : this.unCheckedValue;
39
+ /**
40
+ * Checks if it is necessary to prevent the click from bubbling
41
+ */
42
+ this.handleClick = (event) => {
43
+ if (this.readonly || this.disabled) {
44
+ return;
45
+ }
46
+ event.stopPropagation();
47
+ };
48
+ this.handleChange = (event) => {
49
+ event.stopPropagation();
50
+ const inputRef = event.target;
51
+ const checked = inputRef.checked;
52
+ const value = this.getValue(checked);
53
+ this.checked = checked;
54
+ this.value = value;
55
+ inputRef.value = value; // Update input's value before emitting the event
56
+ this.input.emit(event);
57
+ if (this.highlightable) {
58
+ this.click.emit();
59
+ }
60
+ };
61
+ }
62
+ valueChanged() {
63
+ this.checked = this.value === this.checkedValue;
64
+ }
65
+ componentWillLoad() {
66
+ this.checked = this.value === this.checkedValue;
67
+ }
68
+ render() {
69
+ var _a;
70
+ const additionalParts = PARTS(this.checked, this.indeterminate);
71
+ return (index.h(index.Host, { class: {
72
+ [reserverdNames.DISABLED_CLASS]: this.disabled,
73
+ "ch-checkbox--actionable": (!this.readonly && !this.disabled) ||
74
+ (this.readonly && this.highlightable)
75
+ } }, index.h("div", { class: {
76
+ container: true,
77
+ "container--checked": this.checked
78
+ }, part: `container${additionalParts}` }, index.h("input", { "aria-label": ((_a = this.accessibleName) === null || _a === void 0 ? void 0 : _a.trim()) !== "" &&
79
+ this.accessibleName !== this.caption
80
+ ? this.accessibleName
81
+ : null, id: this.caption ? CHECKBOX_ID : null, class: "input", part: "input", type: "checkbox", checked: this.checked, disabled: this.disabled || this.readonly, indeterminate: this.indeterminate, value: this.value, onClick: this.handleClick, onInput: this.handleChange }), index.h("div", { class: {
82
+ option: true,
83
+ "option--checked": this.checked && !this.indeterminate,
84
+ "option--indeterminate": this.indeterminate
85
+ }, part: `option${additionalParts}`, "aria-hidden": "true" })), this.caption && (index.h("label", { class: "label", part: "label", htmlFor: CHECKBOX_ID, onClick: this.handleClick }, this.caption))));
86
+ }
87
+ get element() { return index.getElement(this); }
88
+ static get watchers() { return {
89
+ "value": ["valueChanged"]
90
+ }; }
91
+ };
92
+ CheckBox.style = checkboxCss;
7
93
 
8
94
  const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
9
95
  const mousePositionY = event.clientY - container.getBoundingClientRect().top;
@@ -22,9 +108,8 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
22
108
  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%}";
23
109
 
24
110
  const TREE_ITEM_TAG_NAME$1 = "ch-tree-x-list-item";
25
- const TREE_LIST_TAG_NAME = "ch-tree-x-list";
111
+ const TREE_TAG_NAME = "ch-tree-x";
26
112
  // Selectors
27
- const TREE_LIST_AND_ITEM_SELECTOR = TREE_LIST_TAG_NAME + "," + TREE_ITEM_TAG_NAME$1;
28
113
  // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
29
114
  const TEXT_FORMAT = "text/plain";
30
115
  const ARROW_DOWN_KEY = "ArrowDown";
@@ -80,10 +165,6 @@ const ChTreeX = class {
80
165
  this.draggedParentIds = [];
81
166
  this.draggingInTheDocument = false;
82
167
  this.draggingInTree = false;
83
- /**
84
- * Level in the tree at which the control is placed.
85
- */
86
- this.level = -1;
87
168
  /**
88
169
  * Set this attribute if you want to allow multi selection of the items.
89
170
  */
@@ -98,11 +179,6 @@ const ChTreeX = class {
98
179
  * tree.
99
180
  */
100
181
  this.scrollToEdgeOnDrag = true;
101
- /**
102
- * `true` to display the relation between tree items and tree lists using
103
- * lines.
104
- */
105
- this.showLines = "none";
106
182
  /**
107
183
  * This property lets you specify if the tree is waiting to process the drop
108
184
  * of items.
@@ -111,6 +187,7 @@ const ChTreeX = class {
111
187
  this.trackItemDrag = (event) => {
112
188
  event.preventDefault();
113
189
  this.lastDragEvent = event;
190
+ this.updateDropEffect(event);
114
191
  if (!this.needForRAF) {
115
192
  return;
116
193
  }
@@ -130,57 +207,6 @@ const ChTreeX = class {
130
207
  requestAnimationFrame(this.fixScrollPositionOnDrag);
131
208
  });
132
209
  };
133
- this.handleKeyDownEvents = (event) => {
134
- const keyHandler = this.keyDownEvents[event.key];
135
- if (keyHandler) {
136
- keyHandler(event);
137
- }
138
- };
139
- }
140
- handleShowLinesChange(newShowLines) {
141
- const treeItems = this.el.querySelectorAll(TREE_LIST_AND_ITEM_SELECTOR);
142
- treeItems.forEach(item => {
143
- item.showLines = newShowLines;
144
- });
145
- }
146
- /**
147
- * Given an item id, it displays and scrolls into the item view.
148
- */
149
- async scrollIntoVisible(treeItemId) {
150
- const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME$1}#${treeItemId}`);
151
- if (!itemRef) {
152
- return;
153
- }
154
- let parentItem = itemRef.parentElement.parentElement;
155
- // Expand all parents
156
- while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
157
- parentItem.expanded = true;
158
- parentItem = parentItem.parentElement.parentElement;
159
- }
160
- // Wait until the parents are expanded
161
- requestAnimationFrame(() => {
162
- itemRef.scrollIntoView();
163
- });
164
- }
165
- /**
166
- * Update the information about the valid droppable zones.
167
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
168
- * @param newContainerId ID of the container where the drag is trying to be made.
169
- * @param draggedItems Information about the dragged items.
170
- * @param validDrop Current state of the droppable zone.
171
- */
172
- async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
173
- var _a;
174
- if (!this.draggingInTheDocument ||
175
- requestTimestamp <= this.dragStartTimestamp) {
176
- return;
177
- }
178
- const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
179
- this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
180
- const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
181
- if (shouldUpdateDragEnterInCurrentContainer) {
182
- this.lastOpenSubTreeItem.dragState = "enter";
183
- }
184
210
  }
185
211
  // /**
186
212
  // * Returns an array of the selected tree items, providing the id, caption and
@@ -197,6 +223,13 @@ const ChTreeX = class {
197
223
  // selected: item.selected
198
224
  // }));
199
225
  // }
226
+ // Set edit mode in items
227
+ handleKeyDownEvents(event) {
228
+ const keyHandler = this.keyDownEvents[event.key];
229
+ if (keyHandler) {
230
+ keyHandler(event);
231
+ }
232
+ }
200
233
  // We can't use capture, because the dataTransfer info would not be defined
201
234
  // Also, we cant use capture and setTimeout with 0 seconds, because the
202
235
  // getData method can only be accessed during the dragstart and drop event
@@ -251,6 +284,7 @@ const ChTreeX = class {
251
284
  }
252
285
  this.itemsDropped.emit({
253
286
  newContainer: { id: newContainer.id, metadata: newContainer.metadata },
287
+ draggingSelectedItems: this.draggingSelectedItems,
254
288
  draggedItems: draggedItems,
255
289
  dropInTheSameTree: this.draggingInTree
256
290
  });
@@ -260,7 +294,13 @@ const ChTreeX = class {
260
294
  capture: true
261
295
  });
262
296
  this.currentDraggedItem = event.target;
263
- this.updateDragInfo(event.detail);
297
+ const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
298
+ if (!allItemsCanBeDragged) {
299
+ // This effect disables drop interactions in all page elements, so there
300
+ // is no need to capture and prevent the drop event in the window
301
+ event.detail.dragEvent.dataTransfer.effectAllowed = "none";
302
+ return;
303
+ }
264
304
  this.draggingInTree = true;
265
305
  if (this.scrollToEdgeOnDrag) {
266
306
  this.fixScrollPositionOnDrag();
@@ -274,26 +314,94 @@ const ChTreeX = class {
274
314
  // Reset not allowed droppable ids
275
315
  this.resetVariables();
276
316
  }
317
+ /**
318
+ * Only sync the info about the selected items. It does not update the state
319
+ * of the previous selected items.
320
+ */
321
+ handleSelectedItemSync(event) {
322
+ event.stopPropagation();
323
+ const selectedItemInfo = event.detail;
324
+ // If the item is selected, add it to list
325
+ if (selectedItemInfo.selected) {
326
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
327
+ }
328
+ else {
329
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
330
+ }
331
+ }
277
332
  handleSelectedItemChange(event) {
278
333
  event.stopPropagation();
279
334
  const selectedItemInfo = event.detail;
280
335
  const selectedItemEl = event.target;
281
336
  this.handleItemSelection(selectedItemEl, selectedItemInfo);
282
337
  }
338
+ /**
339
+ * Clear all information about the selected items. This method is intended to
340
+ * be used when selected items are reordered and the selected references will
341
+ * no longer be useful.
342
+ */
343
+ async clearSelectedItemsInfo() {
344
+ this.clearSelectedItems();
345
+ }
346
+ /**
347
+ * Given an item id, it displays and scrolls into the item view.
348
+ */
349
+ async scrollIntoVisible(treeItemId) {
350
+ const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME$1}#${treeItemId}`);
351
+ if (!itemRef) {
352
+ return;
353
+ }
354
+ let parentItem = itemRef.parentElement.parentElement;
355
+ // Expand all parents
356
+ while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
357
+ parentItem.expanded = true;
358
+ parentItem = parentItem.parentElement.parentElement;
359
+ }
360
+ // Wait until the parents are expanded
361
+ requestAnimationFrame(() => {
362
+ itemRef.scrollIntoView();
363
+ });
364
+ }
365
+ /**
366
+ * Update the information about the valid droppable zones.
367
+ * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
368
+ * @param newContainerId ID of the container where the drag is trying to be made.
369
+ * @param draggedItems Information about the dragged items.
370
+ * @param validDrop Current state of the droppable zone.
371
+ */
372
+ async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
373
+ var _a;
374
+ if (!this.draggingInTheDocument ||
375
+ requestTimestamp <= this.dragStartTimestamp) {
376
+ return;
377
+ }
378
+ const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
379
+ this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
380
+ const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
381
+ if (shouldUpdateDragEnterInCurrentContainer) {
382
+ this.lastOpenSubTreeItem.dragState = "enter";
383
+ }
384
+ }
283
385
  validDroppableZone(event) {
284
386
  const containerTarget = event.target;
285
- // When dragging in the same tree, don't mark droppable zones if they are
286
- // the dragged items or their direct parents
287
- if (this.draggingInTree &&
288
- (this.draggedIds.includes(containerTarget.id) ||
289
- this.draggedParentIds.includes(containerTarget.id))) {
290
- return "invalid";
291
- }
292
387
  const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
293
388
  const droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
294
389
  if (droppableZoneState != null) {
295
390
  return droppableZoneState;
296
391
  }
392
+ // Do not show drop zones if:
393
+ // - The effect does not allow it.
394
+ // - The drop is disabled in the container target.
395
+ // - When dragging in the same tree, don't mark droppable zones if they are
396
+ // the dragged items or their direct parents.
397
+ if (event.dataTransfer.effectAllowed === "none" ||
398
+ containerTarget.dropDisabled ||
399
+ (this.draggingInTree &&
400
+ (this.draggedIds.includes(containerTarget.id) ||
401
+ this.draggedParentIds.includes(containerTarget.id)))) {
402
+ this.validDroppableZoneCache.set(cacheKey, "invalid");
403
+ return "invalid";
404
+ }
297
405
  this.validDroppableZoneCache.set(cacheKey, "checking");
298
406
  this.droppableZoneEnter.emit({
299
407
  newContainer: {
@@ -313,25 +421,43 @@ const ChTreeX = class {
313
421
  this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
314
422
  }, this.openSubTreeCountdown);
315
423
  }
424
+ updateDropEffect(event) {
425
+ const itemTarget = event.target;
426
+ // Check if it is a valid item
427
+ if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1 ||
428
+ itemTarget.closest(TREE_TAG_NAME) !== this.el) {
429
+ return;
430
+ }
431
+ const cacheKey = getDroppableZoneKey(itemTarget.id, this.draggedItems);
432
+ const droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
433
+ if (droppableZoneState === "invalid") {
434
+ event.dataTransfer.dropEffect = "none";
435
+ }
436
+ }
316
437
  resetVariables() {
317
438
  this.draggedIds = [];
318
439
  this.draggedParentIds = [];
319
440
  }
320
441
  /**
321
- * Update the dataTransfer in the drag event to store the ids and metadata of
322
- * the dragged items. Also it updates the visual information of the dragged
442
+ * First, it check if all items can be dragged. If so, it updates the
443
+ * dataTransfer in the drag event to store the ids and metadata of the
444
+ * dragged items. Also it updates the visual information of the dragged
323
445
  * items.
446
+ * @returns If all selected items can be dragged.
324
447
  */
325
- updateDragInfo(dragInfo) {
448
+ checkDragValidityAndUpdateDragInfo(dragInfo) {
326
449
  const draggedElement = dragInfo.elem;
327
450
  const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
328
451
  this.draggingSelectedItems = isDraggingSelectedItems;
329
452
  let dataTransferInfo = [];
453
+ let dragIsEnabledForAllItems;
330
454
  if (isDraggingSelectedItems) {
331
455
  const selectedItemKeys = [...this.selectedItemsInfo.keys()];
456
+ const selectedItemValues = [...this.selectedItemsInfo.values()];
332
457
  const selectedItemCount = selectedItemKeys.length;
458
+ dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
333
459
  this.draggedIds = selectedItemKeys;
334
- dataTransferInfo = [...this.selectedItemsInfo.values()].map(el => ({
460
+ dataTransferInfo = selectedItemValues.map(el => ({
335
461
  id: el.id,
336
462
  metadata: el.metadata
337
463
  }));
@@ -341,6 +467,7 @@ const ChTreeX = class {
341
467
  : selectedItemCount.toString();
342
468
  }
343
469
  else {
470
+ dragIsEnabledForAllItems = !draggedElement.dragDisabled;
344
471
  dataTransferInfo = [
345
472
  { id: draggedElement.id, metadata: draggedElement.metadata }
346
473
  ];
@@ -350,7 +477,11 @@ const ChTreeX = class {
350
477
  this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
351
478
  // Update drag event info
352
479
  const data = JSON.stringify(dataTransferInfo);
353
- dragInfo.dataTransfer.setData(TEXT_FORMAT, data);
480
+ dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
481
+ // We must keep the data binding and processing even if there is an item
482
+ // that can't be dragged, otherwise, other trees or element might behave
483
+ // unexpected when a dragstart event comes
484
+ return dragIsEnabledForAllItems;
354
485
  }
355
486
  getDirectParentsOfDraggableItems(draggingSelectedItems) {
356
487
  if (!draggingSelectedItems) {
@@ -373,6 +504,8 @@ const ChTreeX = class {
373
504
  // If the Control key was not pressed or multi selection is disabled,
374
505
  // remove all selected items
375
506
  if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
507
+ // Don't update the state of the selected item if no needed
508
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
376
509
  this.selectedItemsInfo.forEach(treeItem => {
377
510
  treeItem.itemRef.selected = false;
378
511
  });
@@ -384,23 +517,13 @@ const ChTreeX = class {
384
517
  if (selectedItemInfo.selected) {
385
518
  this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
386
519
  }
387
- else {
388
- this.selectedItemsInfo.delete(selectedItemInfo.id);
389
- }
390
520
  // Sync with UI model
391
521
  this.selectedItemsChange.emit(this.selectedItemsInfo);
392
522
  }
393
523
  clearSelectedItems() {
394
524
  this.selectedItemsInfo.clear();
395
525
  }
396
- connectedCallback() {
397
- // Set edit mode in items
398
- this.el.addEventListener("keydown", this.handleKeyDownEvents, {
399
- capture: true
400
- });
401
- }
402
526
  disconnectedCallback() {
403
- this.el.removeEventListener("keydown", this.handleKeyDownEvents);
404
527
  this.resetVariables();
405
528
  // Remove dragover body event
406
529
  this.handleItemDragEnd();
@@ -413,18 +536,11 @@ const ChTreeX = class {
413
536
  } }, index.h("slot", null), this.draggingInTree && (index.h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
414
537
  }
415
538
  get el() { return index.getElement(this); }
416
- static get watchers() { return {
417
- "showLines": ["handleShowLinesChange"]
418
- }; }
419
539
  };
420
540
  ChTreeX.style = treeXCss;
421
541
 
422
542
  const treeXListCss = ":host{display:grid;grid-auto-rows:min-content;position:relative;width:100%}";
423
543
 
424
- /**
425
- * This variable specifies a reference to the main ch-tree-x element
426
- */
427
- let mainTreeRef$1;
428
544
  const ChTreeListX = class {
429
545
  constructor(hostRef) {
430
546
  index.registerInstance(this, hostRef);
@@ -432,55 +548,11 @@ const ChTreeListX = class {
432
548
  * Level in the tree at which the control is placed.
433
549
  */
434
550
  this.level = 0;
435
- /**
436
- * `true` to display the relation between tree items and tree lists using
437
- * lines.
438
- */
439
- this.showLines = "none";
440
- this.updateLastItemDashedLine = () => {
441
- // @todo WA to avoid StencilJS' bug. The showLines Watch is dispatched
442
- // before the componentDidLoad lifecycle method completes
443
- if (!this.slotRef) {
444
- return;
445
- }
446
- const treeItems = this.slotRef.assignedElements();
447
- if (treeItems.length === 0) {
448
- return;
449
- }
450
- const lastItemIndex = treeItems.length - 1;
451
- for (let i = 0; i < lastItemIndex; i++) {
452
- treeItems[i].lastItem = false;
453
- }
454
- treeItems[lastItemIndex].lastItem = true;
455
- };
456
- }
457
- handleShowLinesChange(newValue) {
458
- // Displayed items may have changed since the last time that `showLines === true`
459
- if (newValue !== "none" && this.level !== 0) {
460
- this.updateLastItemDashedLine();
461
- }
462
- }
463
- componentWillLoad() {
464
- // Set tree level
465
- const parentElement = this.el.parentElement;
466
- // Set item level
467
- this.level = parentElement.level + 1;
468
- // If the mainTreeRef is not defined, the first item that will load this
469
- // reference will be the top tree-x-list
470
- if (!mainTreeRef$1) {
471
- mainTreeRef$1 = parentElement;
472
- }
473
- this.showLines = mainTreeRef$1.showLines;
474
551
  }
475
552
  render() {
476
- return (index.h(index.Host, { role: this.level === 0 ? "tree" : "group" }, index.h("slot", { onSlotchange: this.showLines !== "none" && this.level !== 0
477
- ? this.updateLastItemDashedLine
478
- : null, ref: el => (this.slotRef = el) })));
553
+ return (index.h(index.Host, { role: this.level === 0 ? "tree" : "group" }, index.h("slot", null)));
479
554
  }
480
555
  get el() { return index.getElement(this); }
481
- static get watchers() { return {
482
- "showLines": ["handleShowLinesChange"]
483
- }; }
484
556
  };
485
557
  ChTreeListX.style = treeXListCss;
486
558
 
@@ -496,10 +568,6 @@ const LAST_SUB_ITEM = `:scope>*>${TREE_ITEM_TAG_NAME}:last-child`;
496
568
  const EXPANDABLE_ID = "expandable";
497
569
  const ENTER_KEY = "Enter";
498
570
  const ESCAPE_KEY = "Escape";
499
- /**
500
- * This variable specifies a reference to the main ch-tree-x element
501
- */
502
- let mainTreeRef;
503
571
  const ChTreeXListItem = class {
504
572
  constructor(hostRef) {
505
573
  index.registerInstance(this, hostRef);
@@ -509,6 +577,7 @@ const ChTreeXListItem = class {
509
577
  this.loadLazyContent = index.createEvent(this, "loadLazyContent", 7);
510
578
  this.modifyCaption = index.createEvent(this, "modifyCaption", 7);
511
579
  this.selectedItemChange = index.createEvent(this, "selectedItemChange", 7);
580
+ this.selectedItemSync = index.createEvent(this, "selectedItemSync", 7);
512
581
  /**
513
582
  * Useful to ignore the checkbox change when it was committed from a children.
514
583
  */
@@ -533,6 +602,16 @@ const ChTreeXListItem = class {
533
602
  * (for example, click event).
534
603
  */
535
604
  this.disabled = false;
605
+ /**
606
+ * This attribute lets you specify if the drag operation is disabled in the
607
+ * control. If `true`, the control can't be dragged.
608
+ */
609
+ this.dragDisabled = false;
610
+ /**
611
+ * This attribute lets you specify if the drop operation is disabled in the
612
+ * control. If `true`, the control won't accept any drops.
613
+ */
614
+ this.dropDisabled = false;
536
615
  /**
537
616
  * This property lets you define the current state of the item when it's
538
617
  * being dragged.
@@ -643,17 +722,18 @@ const ChTreeXListItem = class {
643
722
  this.expanded = !this.expanded;
644
723
  }
645
724
  this.selected = true;
646
- this.selectedItemChange.emit({
647
- ctrlKeyPressed: helpers.mouseEventModifierKey(event),
648
- expanded: this.expanded,
649
- goToReference: false,
650
- id: this.el.id,
651
- itemRef: this.el,
652
- metadata: this.metadata,
653
- parentId: this.el.parentElement.parentElement.id,
654
- selected: true
655
- });
725
+ this.selectedItemChange.emit(this.getSelectedInfo(helpers.mouseEventModifierKey(event), false, true));
656
726
  };
727
+ this.getSelectedInfo = (ctrlKeyPressed, goToReference, selected) => ({
728
+ ctrlKeyPressed: ctrlKeyPressed,
729
+ expanded: this.expanded,
730
+ goToReference: goToReference,
731
+ id: this.el.id,
732
+ itemRef: this.el,
733
+ metadata: this.metadata,
734
+ parentId: this.el.parentElement.parentElement.id,
735
+ selected: selected
736
+ });
657
737
  this.handleActionDblClick = (event) => {
658
738
  event.stopPropagation();
659
739
  if (helpers.mouseEventModifierKey(event)) {
@@ -705,6 +785,7 @@ const ChTreeXListItem = class {
705
785
  // Disallow drag when editing the caption
706
786
  if (this.editing) {
707
787
  event.preventDefault();
788
+ event.stopPropagation();
708
789
  return;
709
790
  }
710
791
  // Remove drag image
@@ -713,7 +794,7 @@ const ChTreeXListItem = class {
713
794
  this.dragState = "start";
714
795
  this.itemDragStart.emit({
715
796
  elem: this.el,
716
- dataTransfer: event.dataTransfer
797
+ dragEvent: event
717
798
  });
718
799
  };
719
800
  this.handleDragEnd = () => {
@@ -763,6 +844,11 @@ const ChTreeXListItem = class {
763
844
  this.disconnectObserver();
764
845
  }
765
846
  }
847
+ handleSelectedChange(newValue) {
848
+ this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
849
+ false, // Does not matter in this case
850
+ newValue));
851
+ }
766
852
  handleShowLinesChange(newShowLines) {
767
853
  if (newShowLines && this.lastItem) {
768
854
  this.setResizeObserver();
@@ -770,9 +856,6 @@ const ChTreeXListItem = class {
770
856
  else {
771
857
  this.disconnectObserver();
772
858
  }
773
- // @todo BUG: showLines does not update in the mainTreeRef, so we have to
774
- // sync the ref with the new value
775
- mainTreeRef.showLines = newShowLines;
776
859
  }
777
860
  updateCheckboxValue(event) {
778
861
  // No need to update the checkbox value based on the children checkbox
@@ -920,29 +1003,11 @@ const ChTreeXListItem = class {
920
1003
  toggleSelected() {
921
1004
  const selected = !this.selected;
922
1005
  this.selected = selected;
923
- this.selectedItemChange.emit({
924
- ctrlKeyPressed: true,
925
- expanded: this.expanded,
926
- goToReference: false,
927
- id: this.el.id,
928
- itemRef: this.el,
929
- metadata: this.metadata,
930
- parentId: this.el.parentElement.parentElement.id,
931
- selected: selected
932
- });
1006
+ this.selectedItemChange.emit(this.getSelectedInfo(true, false, selected));
933
1007
  }
934
1008
  setSelected(goToReference) {
935
1009
  this.selected = true;
936
- this.selectedItemChange.emit({
937
- ctrlKeyPressed: false,
938
- expanded: this.expanded,
939
- goToReference: goToReference,
940
- id: this.el.id,
941
- itemRef: this.el,
942
- metadata: this.metadata,
943
- parentId: this.el.parentElement.parentElement.id,
944
- selected: true
945
- });
1010
+ this.selectedItemChange.emit(this.getSelectedInfo(false, goToReference, true));
946
1011
  }
947
1012
  toggleOrSelect(event) {
948
1013
  if (helpers.mouseEventModifierKey(event)) {
@@ -954,14 +1019,12 @@ const ChTreeXListItem = class {
954
1019
  }
955
1020
  componentWillLoad() {
956
1021
  const parentElement = this.el.parentElement;
957
- // Set item level
958
- this.level = parentElement.level;
959
- if (!mainTreeRef) {
960
- mainTreeRef = parentElement.parentElement;
961
- }
962
- this.showLines = mainTreeRef.showLines;
963
1022
  // Check if must lazy load
964
1023
  this.lazyLoadItems(this.expanded);
1024
+ // Sync selected state with the main tree
1025
+ if (this.selected) {
1026
+ this.selectedItemChange.emit(this.getSelectedInfo(true, false, true));
1027
+ }
965
1028
  // No need to update more the status
966
1029
  if (this.level === 0) {
967
1030
  return;
@@ -988,7 +1051,7 @@ const ChTreeXListItem = class {
988
1051
  const evenLevel = this.level % 2 === 0;
989
1052
  const expandableButtonVisible = !this.leaf && this.showExpandableButton;
990
1053
  const expandableButtonNotVisible = !this.leaf && !this.showExpandableButton;
991
- const acceptDrop = !this.leaf && this.dragState !== "start";
1054
+ const acceptDrop = !this.dropDisabled && !this.leaf && this.dragState !== "start";
992
1055
  const hasContent = !this.leaf && !this.lazyLoad;
993
1056
  const showAllLines = this.showLines === "all" && this.level !== 0;
994
1057
  const showLastLine = this.showLines === "last" && this.level !== 0 && this.lastItem;
@@ -1012,7 +1075,7 @@ const ChTreeXListItem = class {
1012
1075
  "header--level-0": this.level === 0
1013
1076
  }, part: `header${this.disabled ? " disabled" : ""}${this.selected ? " selected" : ""}`, type: "button", disabled: this.disabled, onClick: this.handleActionClick, onKeyDown: !this.editing ? this.handleActionKeyDown : null,
1014
1077
  // Drag and drop
1015
- draggable: true, onDragStart: this.handleDragStart, onDragEnd: this.handleDragEnd, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (index.h("button", { type: "button", class: {
1078
+ draggable: !this.dragDisabled, onDragStart: this.handleDragStart, onDragEnd: !this.dragDisabled ? this.handleDragEnd : null, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (index.h("button", { type: "button", class: {
1016
1079
  "expandable-button": true,
1017
1080
  "expandable-button--expanded": this.expanded,
1018
1081
  "expandable-button--collapsed": !this.expanded
@@ -1035,11 +1098,13 @@ const ChTreeXListItem = class {
1035
1098
  "editing": ["handleEditingChange"],
1036
1099
  "expanded": ["handleExpandedChange"],
1037
1100
  "lastItem": ["handleLasItemChange"],
1101
+ "selected": ["handleSelectedChange"],
1038
1102
  "showLines": ["handleShowLinesChange"]
1039
1103
  }; }
1040
1104
  };
1041
1105
  ChTreeXListItem.style = treeXListItemCss;
1042
1106
 
1107
+ exports.ch_checkbox = CheckBox;
1043
1108
  exports.ch_tree_x = ChTreeX;
1044
1109
  exports.ch_tree_x_list = ChTreeListX;
1045
1110
  exports.ch_tree_x_list_item = ChTreeXListItem;