@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
@@ -1,5 +1,91 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement, w as writeTask } from './index-0da01575.js';
2
- import { m as mouseEventModifierKey } from './helpers-56190205.js';
2
+ import { D as DISABLED_CLASS } from './reserverd-names-2a2d0fb3.js';
3
+ import { m as mouseEventModifierKey } from './helpers-1ecd5e26.js';
4
+
5
+ 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)}";
6
+
7
+ const CHECKBOX_ID = "checkbox";
8
+ const PARTS = (checked, indeterminate) => `${checked ? " checked" : ""}${indeterminate ? " indeterminate" : ""}`;
9
+ const CheckBox = class {
10
+ constructor(hostRef) {
11
+ registerInstance(this, hostRef);
12
+ this.click = createEvent(this, "click", 7);
13
+ this.input = createEvent(this, "input", 7);
14
+ /**
15
+ * This attribute lets you specify if the element is disabled.
16
+ * If disabled, it will not fire any user interaction related event
17
+ * (for example, click event).
18
+ */
19
+ this.disabled = false;
20
+ /**
21
+ * True to highlight control when an action is fired.
22
+ */
23
+ this.highlightable = false;
24
+ /**
25
+ * `true` if the control's value is indeterminate.
26
+ */
27
+ this.indeterminate = false;
28
+ /**
29
+ * This attribute indicates that the user cannot modify the value of the control.
30
+ * Same as [readonly](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly)
31
+ * attribute for `input` elements.
32
+ */
33
+ this.readonly = false;
34
+ this.getValue = (checked) => checked ? this.checkedValue : this.unCheckedValue;
35
+ /**
36
+ * Checks if it is necessary to prevent the click from bubbling
37
+ */
38
+ this.handleClick = (event) => {
39
+ if (this.readonly || this.disabled) {
40
+ return;
41
+ }
42
+ event.stopPropagation();
43
+ };
44
+ this.handleChange = (event) => {
45
+ event.stopPropagation();
46
+ const inputRef = event.target;
47
+ const checked = inputRef.checked;
48
+ const value = this.getValue(checked);
49
+ this.checked = checked;
50
+ this.value = value;
51
+ inputRef.value = value; // Update input's value before emitting the event
52
+ this.input.emit(event);
53
+ if (this.highlightable) {
54
+ this.click.emit();
55
+ }
56
+ };
57
+ }
58
+ valueChanged() {
59
+ this.checked = this.value === this.checkedValue;
60
+ }
61
+ componentWillLoad() {
62
+ this.checked = this.value === this.checkedValue;
63
+ }
64
+ render() {
65
+ var _a;
66
+ const additionalParts = PARTS(this.checked, this.indeterminate);
67
+ return (h(Host, { class: {
68
+ [DISABLED_CLASS]: this.disabled,
69
+ "ch-checkbox--actionable": (!this.readonly && !this.disabled) ||
70
+ (this.readonly && this.highlightable)
71
+ } }, h("div", { class: {
72
+ container: true,
73
+ "container--checked": this.checked
74
+ }, part: `container${additionalParts}` }, h("input", { "aria-label": ((_a = this.accessibleName) === null || _a === void 0 ? void 0 : _a.trim()) !== "" &&
75
+ this.accessibleName !== this.caption
76
+ ? this.accessibleName
77
+ : 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 }), h("div", { class: {
78
+ option: true,
79
+ "option--checked": this.checked && !this.indeterminate,
80
+ "option--indeterminate": this.indeterminate
81
+ }, part: `option${additionalParts}`, "aria-hidden": "true" })), this.caption && (h("label", { class: "label", part: "label", htmlFor: CHECKBOX_ID, onClick: this.handleClick }, this.caption))));
82
+ }
83
+ get element() { return getElement(this); }
84
+ static get watchers() { return {
85
+ "value": ["valueChanged"]
86
+ }; }
87
+ };
88
+ CheckBox.style = checkboxCss;
3
89
 
4
90
  const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
5
91
  const mousePositionY = event.clientY - container.getBoundingClientRect().top;
@@ -18,9 +104,8 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
18
104
  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
105
 
20
106
  const TREE_ITEM_TAG_NAME$1 = "ch-tree-x-list-item";
21
- const TREE_LIST_TAG_NAME = "ch-tree-x-list";
107
+ const TREE_TAG_NAME = "ch-tree-x";
22
108
  // Selectors
23
- const TREE_LIST_AND_ITEM_SELECTOR = TREE_LIST_TAG_NAME + "," + TREE_ITEM_TAG_NAME$1;
24
109
  // const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;
25
110
  const TEXT_FORMAT = "text/plain";
26
111
  const ARROW_DOWN_KEY = "ArrowDown";
@@ -76,10 +161,6 @@ const ChTreeX = class {
76
161
  this.draggedParentIds = [];
77
162
  this.draggingInTheDocument = false;
78
163
  this.draggingInTree = false;
79
- /**
80
- * Level in the tree at which the control is placed.
81
- */
82
- this.level = -1;
83
164
  /**
84
165
  * Set this attribute if you want to allow multi selection of the items.
85
166
  */
@@ -94,11 +175,6 @@ const ChTreeX = class {
94
175
  * tree.
95
176
  */
96
177
  this.scrollToEdgeOnDrag = true;
97
- /**
98
- * `true` to display the relation between tree items and tree lists using
99
- * lines.
100
- */
101
- this.showLines = "none";
102
178
  /**
103
179
  * This property lets you specify if the tree is waiting to process the drop
104
180
  * of items.
@@ -107,6 +183,7 @@ const ChTreeX = class {
107
183
  this.trackItemDrag = (event) => {
108
184
  event.preventDefault();
109
185
  this.lastDragEvent = event;
186
+ this.updateDropEffect(event);
110
187
  if (!this.needForRAF) {
111
188
  return;
112
189
  }
@@ -126,57 +203,6 @@ const ChTreeX = class {
126
203
  requestAnimationFrame(this.fixScrollPositionOnDrag);
127
204
  });
128
205
  };
129
- this.handleKeyDownEvents = (event) => {
130
- const keyHandler = this.keyDownEvents[event.key];
131
- if (keyHandler) {
132
- keyHandler(event);
133
- }
134
- };
135
- }
136
- handleShowLinesChange(newShowLines) {
137
- const treeItems = this.el.querySelectorAll(TREE_LIST_AND_ITEM_SELECTOR);
138
- treeItems.forEach(item => {
139
- item.showLines = newShowLines;
140
- });
141
- }
142
- /**
143
- * Given an item id, it displays and scrolls into the item view.
144
- */
145
- async scrollIntoVisible(treeItemId) {
146
- const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME$1}#${treeItemId}`);
147
- if (!itemRef) {
148
- return;
149
- }
150
- let parentItem = itemRef.parentElement.parentElement;
151
- // Expand all parents
152
- while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
153
- parentItem.expanded = true;
154
- parentItem = parentItem.parentElement.parentElement;
155
- }
156
- // Wait until the parents are expanded
157
- requestAnimationFrame(() => {
158
- itemRef.scrollIntoView();
159
- });
160
- }
161
- /**
162
- * Update the information about the valid droppable zones.
163
- * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
164
- * @param newContainerId ID of the container where the drag is trying to be made.
165
- * @param draggedItems Information about the dragged items.
166
- * @param validDrop Current state of the droppable zone.
167
- */
168
- async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
169
- var _a;
170
- if (!this.draggingInTheDocument ||
171
- requestTimestamp <= this.dragStartTimestamp) {
172
- return;
173
- }
174
- const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
175
- this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
176
- const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
177
- if (shouldUpdateDragEnterInCurrentContainer) {
178
- this.lastOpenSubTreeItem.dragState = "enter";
179
- }
180
206
  }
181
207
  // /**
182
208
  // * Returns an array of the selected tree items, providing the id, caption and
@@ -193,6 +219,13 @@ const ChTreeX = class {
193
219
  // selected: item.selected
194
220
  // }));
195
221
  // }
222
+ // Set edit mode in items
223
+ handleKeyDownEvents(event) {
224
+ const keyHandler = this.keyDownEvents[event.key];
225
+ if (keyHandler) {
226
+ keyHandler(event);
227
+ }
228
+ }
196
229
  // We can't use capture, because the dataTransfer info would not be defined
197
230
  // Also, we cant use capture and setTimeout with 0 seconds, because the
198
231
  // getData method can only be accessed during the dragstart and drop event
@@ -247,6 +280,7 @@ const ChTreeX = class {
247
280
  }
248
281
  this.itemsDropped.emit({
249
282
  newContainer: { id: newContainer.id, metadata: newContainer.metadata },
283
+ draggingSelectedItems: this.draggingSelectedItems,
250
284
  draggedItems: draggedItems,
251
285
  dropInTheSameTree: this.draggingInTree
252
286
  });
@@ -256,7 +290,13 @@ const ChTreeX = class {
256
290
  capture: true
257
291
  });
258
292
  this.currentDraggedItem = event.target;
259
- this.updateDragInfo(event.detail);
293
+ const allItemsCanBeDragged = this.checkDragValidityAndUpdateDragInfo(event.detail);
294
+ if (!allItemsCanBeDragged) {
295
+ // This effect disables drop interactions in all page elements, so there
296
+ // is no need to capture and prevent the drop event in the window
297
+ event.detail.dragEvent.dataTransfer.effectAllowed = "none";
298
+ return;
299
+ }
260
300
  this.draggingInTree = true;
261
301
  if (this.scrollToEdgeOnDrag) {
262
302
  this.fixScrollPositionOnDrag();
@@ -270,26 +310,94 @@ const ChTreeX = class {
270
310
  // Reset not allowed droppable ids
271
311
  this.resetVariables();
272
312
  }
313
+ /**
314
+ * Only sync the info about the selected items. It does not update the state
315
+ * of the previous selected items.
316
+ */
317
+ handleSelectedItemSync(event) {
318
+ event.stopPropagation();
319
+ const selectedItemInfo = event.detail;
320
+ // If the item is selected, add it to list
321
+ if (selectedItemInfo.selected) {
322
+ this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
323
+ }
324
+ else {
325
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
326
+ }
327
+ }
273
328
  handleSelectedItemChange(event) {
274
329
  event.stopPropagation();
275
330
  const selectedItemInfo = event.detail;
276
331
  const selectedItemEl = event.target;
277
332
  this.handleItemSelection(selectedItemEl, selectedItemInfo);
278
333
  }
334
+ /**
335
+ * Clear all information about the selected items. This method is intended to
336
+ * be used when selected items are reordered and the selected references will
337
+ * no longer be useful.
338
+ */
339
+ async clearSelectedItemsInfo() {
340
+ this.clearSelectedItems();
341
+ }
342
+ /**
343
+ * Given an item id, it displays and scrolls into the item view.
344
+ */
345
+ async scrollIntoVisible(treeItemId) {
346
+ const itemRef = this.el.querySelector(`${TREE_ITEM_TAG_NAME$1}#${treeItemId}`);
347
+ if (!itemRef) {
348
+ return;
349
+ }
350
+ let parentItem = itemRef.parentElement.parentElement;
351
+ // Expand all parents
352
+ while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
353
+ parentItem.expanded = true;
354
+ parentItem = parentItem.parentElement.parentElement;
355
+ }
356
+ // Wait until the parents are expanded
357
+ requestAnimationFrame(() => {
358
+ itemRef.scrollIntoView();
359
+ });
360
+ }
361
+ /**
362
+ * Update the information about the valid droppable zones.
363
+ * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.
364
+ * @param newContainerId ID of the container where the drag is trying to be made.
365
+ * @param draggedItems Information about the dragged items.
366
+ * @param validDrop Current state of the droppable zone.
367
+ */
368
+ async updateValidDroppableZone(requestTimestamp, newContainerId, draggedItems, validDrop) {
369
+ var _a;
370
+ if (!this.draggingInTheDocument ||
371
+ requestTimestamp <= this.dragStartTimestamp) {
372
+ return;
373
+ }
374
+ const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems);
375
+ this.validDroppableZoneCache.set(droppableZoneKey, validDrop ? "valid" : "invalid");
376
+ const shouldUpdateDragEnterInCurrentContainer = ((_a = this.lastOpenSubTreeItem) === null || _a === void 0 ? void 0 : _a.id) === newContainerId;
377
+ if (shouldUpdateDragEnterInCurrentContainer) {
378
+ this.lastOpenSubTreeItem.dragState = "enter";
379
+ }
380
+ }
279
381
  validDroppableZone(event) {
280
382
  const containerTarget = event.target;
281
- // When dragging in the same tree, don't mark droppable zones if they are
282
- // the dragged items or their direct parents
283
- if (this.draggingInTree &&
284
- (this.draggedIds.includes(containerTarget.id) ||
285
- this.draggedParentIds.includes(containerTarget.id))) {
286
- return "invalid";
287
- }
288
383
  const cacheKey = getDroppableZoneKey(containerTarget.id, this.draggedItems);
289
384
  const droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
290
385
  if (droppableZoneState != null) {
291
386
  return droppableZoneState;
292
387
  }
388
+ // Do not show drop zones if:
389
+ // - The effect does not allow it.
390
+ // - The drop is disabled in the container target.
391
+ // - When dragging in the same tree, don't mark droppable zones if they are
392
+ // the dragged items or their direct parents.
393
+ if (event.dataTransfer.effectAllowed === "none" ||
394
+ containerTarget.dropDisabled ||
395
+ (this.draggingInTree &&
396
+ (this.draggedIds.includes(containerTarget.id) ||
397
+ this.draggedParentIds.includes(containerTarget.id)))) {
398
+ this.validDroppableZoneCache.set(cacheKey, "invalid");
399
+ return "invalid";
400
+ }
293
401
  this.validDroppableZoneCache.set(cacheKey, "checking");
294
402
  this.droppableZoneEnter.emit({
295
403
  newContainer: {
@@ -309,25 +417,43 @@ const ChTreeX = class {
309
417
  this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });
310
418
  }, this.openSubTreeCountdown);
311
419
  }
420
+ updateDropEffect(event) {
421
+ const itemTarget = event.target;
422
+ // Check if it is a valid item
423
+ if (itemTarget.tagName.toLowerCase() !== TREE_ITEM_TAG_NAME$1 ||
424
+ itemTarget.closest(TREE_TAG_NAME) !== this.el) {
425
+ return;
426
+ }
427
+ const cacheKey = getDroppableZoneKey(itemTarget.id, this.draggedItems);
428
+ const droppableZoneState = this.validDroppableZoneCache.get(cacheKey);
429
+ if (droppableZoneState === "invalid") {
430
+ event.dataTransfer.dropEffect = "none";
431
+ }
432
+ }
312
433
  resetVariables() {
313
434
  this.draggedIds = [];
314
435
  this.draggedParentIds = [];
315
436
  }
316
437
  /**
317
- * Update the dataTransfer in the drag event to store the ids and metadata of
318
- * the dragged items. Also it updates the visual information of the dragged
438
+ * First, it check if all items can be dragged. If so, it updates the
439
+ * dataTransfer in the drag event to store the ids and metadata of the
440
+ * dragged items. Also it updates the visual information of the dragged
319
441
  * items.
442
+ * @returns If all selected items can be dragged.
320
443
  */
321
- updateDragInfo(dragInfo) {
444
+ checkDragValidityAndUpdateDragInfo(dragInfo) {
322
445
  const draggedElement = dragInfo.elem;
323
446
  const isDraggingSelectedItems = this.selectedItemsInfo.has(draggedElement.id);
324
447
  this.draggingSelectedItems = isDraggingSelectedItems;
325
448
  let dataTransferInfo = [];
449
+ let dragIsEnabledForAllItems;
326
450
  if (isDraggingSelectedItems) {
327
451
  const selectedItemKeys = [...this.selectedItemsInfo.keys()];
452
+ const selectedItemValues = [...this.selectedItemsInfo.values()];
328
453
  const selectedItemCount = selectedItemKeys.length;
454
+ dragIsEnabledForAllItems = selectedItemValues.every(el => !el.itemRef.dragDisabled);
329
455
  this.draggedIds = selectedItemKeys;
330
- dataTransferInfo = [...this.selectedItemsInfo.values()].map(el => ({
456
+ dataTransferInfo = selectedItemValues.map(el => ({
331
457
  id: el.id,
332
458
  metadata: el.metadata
333
459
  }));
@@ -337,6 +463,7 @@ const ChTreeX = class {
337
463
  : selectedItemCount.toString();
338
464
  }
339
465
  else {
466
+ dragIsEnabledForAllItems = !draggedElement.dragDisabled;
340
467
  dataTransferInfo = [
341
468
  { id: draggedElement.id, metadata: draggedElement.metadata }
342
469
  ];
@@ -346,7 +473,11 @@ const ChTreeX = class {
346
473
  this.getDirectParentsOfDraggableItems(isDraggingSelectedItems);
347
474
  // Update drag event info
348
475
  const data = JSON.stringify(dataTransferInfo);
349
- dragInfo.dataTransfer.setData(TEXT_FORMAT, data);
476
+ dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);
477
+ // We must keep the data binding and processing even if there is an item
478
+ // that can't be dragged, otherwise, other trees or element might behave
479
+ // unexpected when a dragstart event comes
480
+ return dragIsEnabledForAllItems;
350
481
  }
351
482
  getDirectParentsOfDraggableItems(draggingSelectedItems) {
352
483
  if (!draggingSelectedItems) {
@@ -369,6 +500,8 @@ const ChTreeX = class {
369
500
  // If the Control key was not pressed or multi selection is disabled,
370
501
  // remove all selected items
371
502
  if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {
503
+ // Don't update the state of the selected item if no needed
504
+ this.selectedItemsInfo.delete(selectedItemInfo.id);
372
505
  this.selectedItemsInfo.forEach(treeItem => {
373
506
  treeItem.itemRef.selected = false;
374
507
  });
@@ -380,23 +513,13 @@ const ChTreeX = class {
380
513
  if (selectedItemInfo.selected) {
381
514
  this.selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);
382
515
  }
383
- else {
384
- this.selectedItemsInfo.delete(selectedItemInfo.id);
385
- }
386
516
  // Sync with UI model
387
517
  this.selectedItemsChange.emit(this.selectedItemsInfo);
388
518
  }
389
519
  clearSelectedItems() {
390
520
  this.selectedItemsInfo.clear();
391
521
  }
392
- connectedCallback() {
393
- // Set edit mode in items
394
- this.el.addEventListener("keydown", this.handleKeyDownEvents, {
395
- capture: true
396
- });
397
- }
398
522
  disconnectedCallback() {
399
- this.el.removeEventListener("keydown", this.handleKeyDownEvents);
400
523
  this.resetVariables();
401
524
  // Remove dragover body event
402
525
  this.handleItemDragEnd();
@@ -409,18 +532,11 @@ const ChTreeX = class {
409
532
  } }, h("slot", null), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
410
533
  }
411
534
  get el() { return getElement(this); }
412
- static get watchers() { return {
413
- "showLines": ["handleShowLinesChange"]
414
- }; }
415
535
  };
416
536
  ChTreeX.style = treeXCss;
417
537
 
418
538
  const treeXListCss = ":host{display:grid;grid-auto-rows:min-content;position:relative;width:100%}";
419
539
 
420
- /**
421
- * This variable specifies a reference to the main ch-tree-x element
422
- */
423
- let mainTreeRef$1;
424
540
  const ChTreeListX = class {
425
541
  constructor(hostRef) {
426
542
  registerInstance(this, hostRef);
@@ -428,55 +544,11 @@ const ChTreeListX = class {
428
544
  * Level in the tree at which the control is placed.
429
545
  */
430
546
  this.level = 0;
431
- /**
432
- * `true` to display the relation between tree items and tree lists using
433
- * lines.
434
- */
435
- this.showLines = "none";
436
- this.updateLastItemDashedLine = () => {
437
- // @todo WA to avoid StencilJS' bug. The showLines Watch is dispatched
438
- // before the componentDidLoad lifecycle method completes
439
- if (!this.slotRef) {
440
- return;
441
- }
442
- const treeItems = this.slotRef.assignedElements();
443
- if (treeItems.length === 0) {
444
- return;
445
- }
446
- const lastItemIndex = treeItems.length - 1;
447
- for (let i = 0; i < lastItemIndex; i++) {
448
- treeItems[i].lastItem = false;
449
- }
450
- treeItems[lastItemIndex].lastItem = true;
451
- };
452
- }
453
- handleShowLinesChange(newValue) {
454
- // Displayed items may have changed since the last time that `showLines === true`
455
- if (newValue !== "none" && this.level !== 0) {
456
- this.updateLastItemDashedLine();
457
- }
458
- }
459
- componentWillLoad() {
460
- // Set tree level
461
- const parentElement = this.el.parentElement;
462
- // Set item level
463
- this.level = parentElement.level + 1;
464
- // If the mainTreeRef is not defined, the first item that will load this
465
- // reference will be the top tree-x-list
466
- if (!mainTreeRef$1) {
467
- mainTreeRef$1 = parentElement;
468
- }
469
- this.showLines = mainTreeRef$1.showLines;
470
547
  }
471
548
  render() {
472
- return (h(Host, { role: this.level === 0 ? "tree" : "group" }, h("slot", { onSlotchange: this.showLines !== "none" && this.level !== 0
473
- ? this.updateLastItemDashedLine
474
- : null, ref: el => (this.slotRef = el) })));
549
+ return (h(Host, { role: this.level === 0 ? "tree" : "group" }, h("slot", null)));
475
550
  }
476
551
  get el() { return getElement(this); }
477
- static get watchers() { return {
478
- "showLines": ["handleShowLinesChange"]
479
- }; }
480
552
  };
481
553
  ChTreeListX.style = treeXListCss;
482
554
 
@@ -492,10 +564,6 @@ const LAST_SUB_ITEM = `:scope>*>${TREE_ITEM_TAG_NAME}:last-child`;
492
564
  const EXPANDABLE_ID = "expandable";
493
565
  const ENTER_KEY = "Enter";
494
566
  const ESCAPE_KEY = "Escape";
495
- /**
496
- * This variable specifies a reference to the main ch-tree-x element
497
- */
498
- let mainTreeRef;
499
567
  const ChTreeXListItem = class {
500
568
  constructor(hostRef) {
501
569
  registerInstance(this, hostRef);
@@ -505,6 +573,7 @@ const ChTreeXListItem = class {
505
573
  this.loadLazyContent = createEvent(this, "loadLazyContent", 7);
506
574
  this.modifyCaption = createEvent(this, "modifyCaption", 7);
507
575
  this.selectedItemChange = createEvent(this, "selectedItemChange", 7);
576
+ this.selectedItemSync = createEvent(this, "selectedItemSync", 7);
508
577
  /**
509
578
  * Useful to ignore the checkbox change when it was committed from a children.
510
579
  */
@@ -529,6 +598,16 @@ const ChTreeXListItem = class {
529
598
  * (for example, click event).
530
599
  */
531
600
  this.disabled = false;
601
+ /**
602
+ * This attribute lets you specify if the drag operation is disabled in the
603
+ * control. If `true`, the control can't be dragged.
604
+ */
605
+ this.dragDisabled = false;
606
+ /**
607
+ * This attribute lets you specify if the drop operation is disabled in the
608
+ * control. If `true`, the control won't accept any drops.
609
+ */
610
+ this.dropDisabled = false;
532
611
  /**
533
612
  * This property lets you define the current state of the item when it's
534
613
  * being dragged.
@@ -639,17 +718,18 @@ const ChTreeXListItem = class {
639
718
  this.expanded = !this.expanded;
640
719
  }
641
720
  this.selected = true;
642
- this.selectedItemChange.emit({
643
- ctrlKeyPressed: mouseEventModifierKey(event),
644
- expanded: this.expanded,
645
- goToReference: false,
646
- id: this.el.id,
647
- itemRef: this.el,
648
- metadata: this.metadata,
649
- parentId: this.el.parentElement.parentElement.id,
650
- selected: true
651
- });
721
+ this.selectedItemChange.emit(this.getSelectedInfo(mouseEventModifierKey(event), false, true));
652
722
  };
723
+ this.getSelectedInfo = (ctrlKeyPressed, goToReference, selected) => ({
724
+ ctrlKeyPressed: ctrlKeyPressed,
725
+ expanded: this.expanded,
726
+ goToReference: goToReference,
727
+ id: this.el.id,
728
+ itemRef: this.el,
729
+ metadata: this.metadata,
730
+ parentId: this.el.parentElement.parentElement.id,
731
+ selected: selected
732
+ });
653
733
  this.handleActionDblClick = (event) => {
654
734
  event.stopPropagation();
655
735
  if (mouseEventModifierKey(event)) {
@@ -701,6 +781,7 @@ const ChTreeXListItem = class {
701
781
  // Disallow drag when editing the caption
702
782
  if (this.editing) {
703
783
  event.preventDefault();
784
+ event.stopPropagation();
704
785
  return;
705
786
  }
706
787
  // Remove drag image
@@ -709,7 +790,7 @@ const ChTreeXListItem = class {
709
790
  this.dragState = "start";
710
791
  this.itemDragStart.emit({
711
792
  elem: this.el,
712
- dataTransfer: event.dataTransfer
793
+ dragEvent: event
713
794
  });
714
795
  };
715
796
  this.handleDragEnd = () => {
@@ -759,6 +840,11 @@ const ChTreeXListItem = class {
759
840
  this.disconnectObserver();
760
841
  }
761
842
  }
843
+ handleSelectedChange(newValue) {
844
+ this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
845
+ false, // Does not matter in this case
846
+ newValue));
847
+ }
762
848
  handleShowLinesChange(newShowLines) {
763
849
  if (newShowLines && this.lastItem) {
764
850
  this.setResizeObserver();
@@ -766,9 +852,6 @@ const ChTreeXListItem = class {
766
852
  else {
767
853
  this.disconnectObserver();
768
854
  }
769
- // @todo BUG: showLines does not update in the mainTreeRef, so we have to
770
- // sync the ref with the new value
771
- mainTreeRef.showLines = newShowLines;
772
855
  }
773
856
  updateCheckboxValue(event) {
774
857
  // No need to update the checkbox value based on the children checkbox
@@ -916,29 +999,11 @@ const ChTreeXListItem = class {
916
999
  toggleSelected() {
917
1000
  const selected = !this.selected;
918
1001
  this.selected = selected;
919
- this.selectedItemChange.emit({
920
- ctrlKeyPressed: true,
921
- expanded: this.expanded,
922
- goToReference: false,
923
- id: this.el.id,
924
- itemRef: this.el,
925
- metadata: this.metadata,
926
- parentId: this.el.parentElement.parentElement.id,
927
- selected: selected
928
- });
1002
+ this.selectedItemChange.emit(this.getSelectedInfo(true, false, selected));
929
1003
  }
930
1004
  setSelected(goToReference) {
931
1005
  this.selected = true;
932
- this.selectedItemChange.emit({
933
- ctrlKeyPressed: false,
934
- expanded: this.expanded,
935
- goToReference: goToReference,
936
- id: this.el.id,
937
- itemRef: this.el,
938
- metadata: this.metadata,
939
- parentId: this.el.parentElement.parentElement.id,
940
- selected: true
941
- });
1006
+ this.selectedItemChange.emit(this.getSelectedInfo(false, goToReference, true));
942
1007
  }
943
1008
  toggleOrSelect(event) {
944
1009
  if (mouseEventModifierKey(event)) {
@@ -950,14 +1015,12 @@ const ChTreeXListItem = class {
950
1015
  }
951
1016
  componentWillLoad() {
952
1017
  const parentElement = this.el.parentElement;
953
- // Set item level
954
- this.level = parentElement.level;
955
- if (!mainTreeRef) {
956
- mainTreeRef = parentElement.parentElement;
957
- }
958
- this.showLines = mainTreeRef.showLines;
959
1018
  // Check if must lazy load
960
1019
  this.lazyLoadItems(this.expanded);
1020
+ // Sync selected state with the main tree
1021
+ if (this.selected) {
1022
+ this.selectedItemChange.emit(this.getSelectedInfo(true, false, true));
1023
+ }
961
1024
  // No need to update more the status
962
1025
  if (this.level === 0) {
963
1026
  return;
@@ -984,7 +1047,7 @@ const ChTreeXListItem = class {
984
1047
  const evenLevel = this.level % 2 === 0;
985
1048
  const expandableButtonVisible = !this.leaf && this.showExpandableButton;
986
1049
  const expandableButtonNotVisible = !this.leaf && !this.showExpandableButton;
987
- const acceptDrop = !this.leaf && this.dragState !== "start";
1050
+ const acceptDrop = !this.dropDisabled && !this.leaf && this.dragState !== "start";
988
1051
  const hasContent = !this.leaf && !this.lazyLoad;
989
1052
  const showAllLines = this.showLines === "all" && this.level !== 0;
990
1053
  const showLastLine = this.showLines === "last" && this.level !== 0 && this.lastItem;
@@ -1008,7 +1071,7 @@ const ChTreeXListItem = class {
1008
1071
  "header--level-0": this.level === 0
1009
1072
  }, part: `header${this.disabled ? " disabled" : ""}${this.selected ? " selected" : ""}`, type: "button", disabled: this.disabled, onClick: this.handleActionClick, onKeyDown: !this.editing ? this.handleActionKeyDown : null,
1010
1073
  // Drag and drop
1011
- draggable: true, onDragStart: this.handleDragStart, onDragEnd: this.handleDragEnd, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (h("button", { type: "button", class: {
1074
+ draggable: !this.dragDisabled, onDragStart: this.handleDragStart, onDragEnd: !this.dragDisabled ? this.handleDragEnd : null, ref: el => (this.headerRef = el) }, !this.leaf && this.showExpandableButton && (h("button", { type: "button", class: {
1012
1075
  "expandable-button": true,
1013
1076
  "expandable-button--expanded": this.expanded,
1014
1077
  "expandable-button--collapsed": !this.expanded
@@ -1031,9 +1094,10 @@ const ChTreeXListItem = class {
1031
1094
  "editing": ["handleEditingChange"],
1032
1095
  "expanded": ["handleExpandedChange"],
1033
1096
  "lastItem": ["handleLasItemChange"],
1097
+ "selected": ["handleSelectedChange"],
1034
1098
  "showLines": ["handleShowLinesChange"]
1035
1099
  }; }
1036
1100
  };
1037
1101
  ChTreeXListItem.style = treeXListItemCss;
1038
1102
 
1039
- export { ChTreeX as ch_tree_x, ChTreeListX as ch_tree_x_list, ChTreeXListItem as ch_tree_x_list_item };
1103
+ export { CheckBox as ch_checkbox, ChTreeX as ch_tree_x, ChTreeListX as ch_tree_x_list, ChTreeXListItem as ch_tree_x_list_item };