@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.
- package/dist/cjs/{ch-tree-x_3.cjs.entry.js → ch-checkbox_4.cjs.entry.js} +249 -184
- package/dist/cjs/ch-global-stylesheet-0e78f960.js +20 -0
- package/dist/cjs/ch-grid-action-refresh_6.cjs.entry.js +43 -37
- package/dist/cjs/ch-grid-infinite-scroll.cjs.entry.js +57 -0
- package/dist/cjs/ch-grid-virtual-scroller.cjs.entry.js +31 -25
- package/dist/cjs/ch-grid_8.cjs.entry.js +30 -21
- package/dist/cjs/ch-style.cjs.entry.js +5 -5
- package/dist/cjs/ch-suggest_4.cjs.entry.js +1 -1
- package/dist/cjs/ch-test-tree-x.cjs.entry.js +26 -6
- package/dist/cjs/ch-window_2.cjs.entry.js +2 -2
- package/dist/cjs/{common-facb7f18.js → common-5d08e273.js} +10 -4
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-container_5.cjs.entry.js +2 -2
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +2 -2
- package/dist/cjs/gx-ide-entity-selector_2.cjs.entry.js +2 -2
- package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js +40 -55
- package/dist/cjs/gx-ide-new-object.cjs.entry.js +1 -4
- package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
- package/dist/cjs/gxg-button.cjs.entry.js +1 -1
- package/dist/cjs/gxg-combo-box_2.cjs.entry.js +39 -42
- package/dist/cjs/gxg-drop-down.cjs.entry.js +1 -1
- package/dist/cjs/gxg-form-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/gxg-form-text.cjs.entry.js +3 -2
- package/dist/cjs/gxg-form-textarea.cjs.entry.js +1 -1
- package/dist/cjs/gxg-label_2.cjs.entry.js +1 -1
- package/dist/cjs/gxg-list-box_2.cjs.entry.js +71 -60
- package/dist/cjs/gxg-menu-slim-item.cjs.entry.js +1 -1
- package/dist/cjs/gxg-option.cjs.entry.js +1 -1
- package/dist/cjs/gxg-select.cjs.entry.js +1 -1
- package/dist/cjs/gxg-test.cjs.entry.js +86 -79
- package/dist/cjs/gxg-tree-view.cjs.entry.js +342 -0
- package/dist/cjs/gxg-tree_2.cjs.entry.js +1 -1
- package/dist/cjs/{helpers-8845f008.js → helpers-291cb1cb.js} +10 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/common/common.js +10 -4
- package/dist/collection/components/container/container.css +5 -0
- package/dist/collection/components/create-kb-from-server/create-kb-from-server.js +1 -1
- package/dist/collection/components/entity-selector/entity-selector.css +1 -1
- package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +50 -10
- package/dist/collection/components/new-kb/new-kb.js +39 -54
- package/dist/collection/components/new-object/new-object.js +1 -4
- package/dist/collection/components/team-dev-select-recent-comment/team-dev-select-recent-comment.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/ch-global-stylesheet.js +14 -1
- package/dist/components/ch-grid-infinite-scroll.js +75 -0
- package/dist/components/ch-grid-rowset-legend.js +32 -1
- package/dist/components/ch-grid-virtual-scroller.js +32 -25
- package/dist/components/ch-grid2.js +30 -21
- package/dist/components/ch-paginator2.js +43 -37
- package/dist/components/ch-style.js +5 -5
- package/dist/components/ch-test-tree-x.js +29 -7
- package/dist/components/ch-window2.js +2 -2
- package/dist/components/combo-box-item.js +2 -2
- package/dist/components/combo-box.js +37 -41
- package/dist/components/common.js +10 -4
- package/dist/components/container.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/entity-selector.js +1 -1
- package/dist/components/form-checkbox.js +1 -1
- package/dist/components/form-text.js +3 -2
- package/dist/components/form-textarea.js +1 -1
- package/dist/components/gx-ide-create-kb-from-server.js +1 -1
- package/dist/components/gx-ide-new-kb.js +40 -55
- package/dist/components/gx-ide-new-object.js +1 -4
- package/dist/components/gx-ide-team-dev-select-recent-comment.js +1 -1
- package/dist/components/gxg-drop-down.js +1 -1
- package/dist/components/gxg-label2.js +1 -1
- package/dist/components/gxg-menu-slim-item.js +1 -1
- package/dist/components/gxg-option.js +1 -1
- package/dist/components/gxg-select.js +1 -1
- package/dist/components/gxg-test.js +106 -145
- package/dist/components/gxg-tree-item2.js +1 -1
- package/dist/components/gxg-tree-view.js +393 -0
- package/dist/components/helpers.js +10 -1
- package/dist/components/index.js +2 -0
- package/dist/components/list-box-item.js +15 -18
- package/dist/components/list-box.js +58 -46
- package/dist/components/suggest.js +1 -1
- package/dist/components/tab-button.js +1 -1
- package/dist/components/tree-x-list-item.js +42 -48
- package/dist/components/tree-x-list.js +2 -51
- package/dist/components/tree-x.js +124 -91
- package/dist/esm/{ch-tree-x_3.entry.js → ch-checkbox_4.entry.js} +249 -185
- package/dist/esm/ch-global-stylesheet-4638bea5.js +16 -0
- package/dist/esm/ch-grid-action-refresh_6.entry.js +43 -37
- package/dist/esm/ch-grid-infinite-scroll.entry.js +53 -0
- package/dist/esm/ch-grid-virtual-scroller.entry.js +31 -25
- package/dist/esm/ch-grid_8.entry.js +30 -21
- package/dist/esm/ch-style.entry.js +5 -5
- package/dist/esm/ch-suggest_4.entry.js +1 -1
- package/dist/esm/ch-test-tree-x.entry.js +26 -6
- package/dist/esm/ch-window_2.entry.js +2 -2
- package/dist/esm/{common-a3df0966.js → common-ec35ec2f.js} +10 -4
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-container_5.entry.js +2 -2
- package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -2
- package/dist/esm/gx-ide-entity-selector_2.entry.js +2 -2
- package/dist/esm/gx-ide-new-environment.entry.js +1 -1
- package/dist/esm/gx-ide-new-kb.entry.js +40 -55
- package/dist/esm/gx-ide-new-object.entry.js +1 -4
- package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js +1 -1
- package/dist/esm/gx-ide-ww-images.entry.js +1 -1
- package/dist/esm/gxg-button.entry.js +1 -1
- package/dist/esm/gxg-combo-box_2.entry.js +39 -42
- package/dist/esm/gxg-drop-down.entry.js +1 -1
- package/dist/esm/gxg-form-checkbox.entry.js +1 -1
- package/dist/esm/gxg-form-text.entry.js +3 -2
- package/dist/esm/gxg-form-textarea.entry.js +1 -1
- package/dist/esm/gxg-label_2.entry.js +1 -1
- package/dist/esm/gxg-list-box_2.entry.js +71 -60
- package/dist/esm/gxg-menu-slim-item.entry.js +1 -1
- package/dist/esm/gxg-option.entry.js +1 -1
- package/dist/esm/gxg-select.entry.js +1 -1
- package/dist/esm/gxg-test.entry.js +87 -80
- package/dist/esm/gxg-tree-view.entry.js +338 -0
- package/dist/esm/gxg-tree_2.entry.js +1 -1
- package/dist/esm/{helpers-56190205.js → helpers-1ecd5e26.js} +10 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.css +2 -2
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +50 -10
- package/dist/genexus-ide-ui/p-052744b8.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-9014609e.entry.js → p-059830b9.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-e5a3e3b9.entry.js → p-282b73f8.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-6da13f78.entry.js → p-2aeae374.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-437069b0.entry.js +1 -0
- package/dist/genexus-ide-ui/p-447c3a31.entry.js +1 -0
- package/dist/genexus-ide-ui/p-4ff84cb2.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-c38c6957.entry.js → p-54d15f4d.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-5c0cb73d.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-0141cbce.entry.js → p-5cb871e3.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-a82042ee.entry.js → p-64cbe277.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-50c603e6.entry.js → p-7c88194a.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-7dbe195c.entry.js +1 -0
- package/dist/genexus-ide-ui/p-8c4b08ea.entry.js +1 -0
- package/dist/genexus-ide-ui/p-93b1e1e9.entry.js +1 -0
- package/dist/genexus-ide-ui/p-98c6b820.entry.js +1 -0
- package/dist/genexus-ide-ui/p-9aa2dd17.entry.js +1 -0
- package/dist/genexus-ide-ui/p-9ba292a0.entry.js +1 -0
- package/dist/genexus-ide-ui/p-a2fa3132.entry.js +1 -0
- package/dist/genexus-ide-ui/p-b374d112.js +1 -0
- package/dist/genexus-ide-ui/p-b5dc509f.entry.js +1 -0
- package/dist/genexus-ide-ui/p-b8d5c561.js +1 -0
- package/dist/genexus-ide-ui/p-c0edbeb5.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-f1116ac5.entry.js → p-cbeac1ab.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-cd5482fa.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-6c825ffc.entry.js → p-ce7a7b5f.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-d02f6ce4.entry.js +1 -0
- package/dist/genexus-ide-ui/p-d30c5a8e.entry.js +1 -0
- package/dist/genexus-ide-ui/p-d312fe25.entry.js +1 -0
- package/dist/genexus-ide-ui/p-d557b2fe.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-72e1b9d5.entry.js → p-e586d05e.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-e6ae0460.entry.js +1 -0
- package/dist/genexus-ide-ui/p-eb8f4ad5.js +1 -0
- package/dist/genexus-ide-ui/p-eddf8a1e.entry.js +1 -0
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/grid/grid-infinite-scroll/ch-grid-infinite-scroll.css +9 -0
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-tree-x.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/button/button.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/combo-box-item/combo-box-item.css +9 -5
- package/dist/node_modules/@genexus/gemini/dist/collection/components/date-picker/date-picker.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/drop-down/drop-down.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/form-checkbox/form-checkbox.css +3 -3
- package/dist/node_modules/@genexus/gemini/dist/collection/components/form-option/option.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/form-select/select.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/form-text/form-text.css +7 -7
- package/dist/node_modules/@genexus/gemini/dist/collection/components/form-textarea/form-textarea.css +3 -3
- package/dist/node_modules/@genexus/gemini/dist/collection/components/label/gxg-label.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/list-box/list-box.css +16 -9
- package/dist/node_modules/@genexus/gemini/dist/collection/components/list-box-item/list-box-item.css +27 -9
- package/dist/node_modules/@genexus/gemini/dist/collection/components/menu-slim/item/item.css +6 -6
- package/dist/node_modules/@genexus/gemini/dist/collection/components/suggest/styles.css +5 -5
- package/dist/node_modules/@genexus/gemini/dist/collection/components/tab-button/tab-button.css +1 -1
- package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-item/gxg-tree-item.css +4 -4
- package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +49 -0
- package/dist/types/common/common.d.ts +1 -1
- package/dist/types/components/new-kb/new-kb.d.ts +0 -9
- package/package.json +3 -3
- package/dist/cjs/ch-checkbox.cjs.entry.js +0 -93
- package/dist/cjs/ch-global-stylesheet-145c4b20.js +0 -5
- package/dist/components/ch-grid-rowset-legend2.js +0 -34
- package/dist/esm/ch-checkbox.entry.js +0 -89
- package/dist/esm/ch-global-stylesheet-f8bbf095.js +0 -3
- package/dist/genexus-ide-ui/p-04f69ecc.entry.js +0 -1
- package/dist/genexus-ide-ui/p-080f6c41.js +0 -1
- package/dist/genexus-ide-ui/p-1ccf523f.entry.js +0 -1
- package/dist/genexus-ide-ui/p-24f47ee2.entry.js +0 -1
- package/dist/genexus-ide-ui/p-28d0afda.entry.js +0 -1
- package/dist/genexus-ide-ui/p-44964acf.js +0 -1
- package/dist/genexus-ide-ui/p-4b7f7425.entry.js +0 -1
- package/dist/genexus-ide-ui/p-597a1d43.entry.js +0 -1
- package/dist/genexus-ide-ui/p-6afc6187.entry.js +0 -1
- package/dist/genexus-ide-ui/p-70489f0c.entry.js +0 -1
- package/dist/genexus-ide-ui/p-84e91b37.entry.js +0 -1
- package/dist/genexus-ide-ui/p-87e8eb72.js +0 -1
- package/dist/genexus-ide-ui/p-8bf7f0e1.entry.js +0 -1
- package/dist/genexus-ide-ui/p-8c2ab053.entry.js +0 -1
- package/dist/genexus-ide-ui/p-917c5696.entry.js +0 -1
- package/dist/genexus-ide-ui/p-92e84fcc.entry.js +0 -1
- package/dist/genexus-ide-ui/p-9dc36eb3.entry.js +0 -1
- package/dist/genexus-ide-ui/p-ad9fdfdf.entry.js +0 -1
- package/dist/genexus-ide-ui/p-bb1809cb.entry.js +0 -1
- package/dist/genexus-ide-ui/p-c056d050.entry.js +0 -1
- package/dist/genexus-ide-ui/p-c6ad49cc.entry.js +0 -1
- package/dist/genexus-ide-ui/p-e1cd9135.entry.js +0 -1
- 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 {
|
|
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
|
|
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.
|
|
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
|
-
*
|
|
318
|
-
* the
|
|
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
|
-
|
|
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 =
|
|
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",
|
|
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
|
-
|
|
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:
|
|
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 };
|