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