@genexus/genexus-ide-ui 0.0.57 → 0.0.58
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-checkbox_4.cjs.entry.js → ch-checkbox_3.cjs.entry.js} +54 -43
- package/dist/cjs/ch-suggest_4.cjs.entry.js +2 -2
- package/dist/cjs/ch-test-suggest.cjs.entry.js +84 -0
- package/dist/cjs/ch-test-tree-x.cjs.entry.js +31 -16
- package/dist/cjs/ch-tooltip.cjs.entry.js +85 -0
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-references.cjs.entry.js +76 -116
- package/dist/cjs/gx-ide-test.cjs.entry.js +51 -5
- package/dist/cjs/gxg-label_2.cjs.entry.js +15 -2
- package/dist/cjs/gxg-tree-view.cjs.entry.js +36 -14
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/common/helpers.js +3 -0
- package/dist/collection/components/references/helpers.js +16 -19
- package/dist/collection/components/references/references.css +8 -0
- package/dist/collection/components/references/references.js +60 -98
- package/dist/components/ch-suggest2.js +2 -2
- package/dist/components/ch-test-suggest.js +119 -0
- package/dist/components/ch-test-tree-x.js +38 -28
- package/dist/components/ch-tooltip.js +115 -0
- package/dist/components/gx-ide-references.js +122 -150
- package/dist/components/gx-ide-test.js +48 -2
- package/dist/components/gxg-tree-view.js +1 -434
- package/dist/components/index.js +2 -1
- package/dist/components/tooltip.js +17 -3
- package/dist/components/tree-view.js +453 -0
- package/dist/components/tree-x-list-item.js +35 -23
- package/dist/components/tree-x.js +21 -7
- package/dist/esm/{ch-checkbox_4.entry.js → ch-checkbox_3.entry.js} +55 -43
- package/dist/esm/ch-suggest_4.entry.js +2 -2
- package/dist/esm/ch-test-suggest.entry.js +80 -0
- package/dist/esm/ch-test-tree-x.entry.js +32 -17
- package/dist/esm/ch-tooltip.entry.js +81 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-references.entry.js +76 -116
- package/dist/esm/gx-ide-test.entry.js +48 -2
- package/dist/esm/gxg-label_2.entry.js +15 -2
- package/dist/esm/gxg-tree-view.entry.js +37 -15
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/p-109209dc.entry.js +1 -0
- package/dist/genexus-ide-ui/p-123b8351.entry.js +1 -0
- package/dist/genexus-ide-ui/p-71c6da54.entry.js +1 -0
- package/dist/genexus-ide-ui/p-86b98a99.entry.js +1 -0
- package/dist/genexus-ide-ui/p-cd00ba19.entry.js +1 -0
- package/dist/genexus-ide-ui/p-ce9fef1a.entry.js +1 -0
- package/dist/genexus-ide-ui/p-d47ed4e3.entry.js +1 -0
- package/dist/genexus-ide-ui/p-d7b452ef.entry.js +1 -0
- package/dist/genexus-ide-ui/p-f62d9b6d.entry.js +1 -0
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-suggest/test-suggest.css +114 -0
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tooltip/tooltip.css +120 -0
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/{tree-x → tree-view/tree-x}/tree-x.css +2 -3
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/{tree-x-list-item → tree-view/tree-x-list-item}/tree-x-list-item.css +3 -6
- package/dist/node_modules/@genexus/gemini/dist/collection/components/tooltip/tooltip.css +11 -0
- package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +58 -12
- package/dist/types/common/helpers.d.ts +1 -0
- package/dist/types/components/references/helpers.d.ts +3 -3
- package/dist/types/components/references/references.d.ts +7 -19
- package/package.json +3 -3
- package/dist/cjs/update-tree-model-8b154db1.js +0 -53
- package/dist/components/ch-tree-x-list.js +0 -6
- package/dist/components/tree-x-list.js +0 -31
- package/dist/components/update-tree-model.js +0 -50
- package/dist/esm/update-tree-model-6c612f05.js +0 -50
- package/dist/genexus-ide-ui/p-1f3a81e3.entry.js +0 -1
- package/dist/genexus-ide-ui/p-46d393f5.entry.js +0 -1
- package/dist/genexus-ide-ui/p-5669baf5.entry.js +0 -1
- package/dist/genexus-ide-ui/p-60b2bd2f.entry.js +0 -1
- package/dist/genexus-ide-ui/p-71ecc7fd.js +0 -1
- package/dist/genexus-ide-ui/p-c7425416.entry.js +0 -1
- package/dist/genexus-ide-ui/p-dd2e0590.entry.js +0 -1
- package/dist/genexus-ide-ui/p-ed5cf480.entry.js +0 -1
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-x-list/tree-x-list.css +0 -6
|
@@ -15,7 +15,7 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
|
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
const treeXCss = "ch-tree-x{display:flex;position:relative;width:100%;overflow:auto}ch-tree-x>.ch-tree-x-container{position:absolute;inset:0}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
|
|
18
|
+
const treeXCss = "ch-tree-x{display:flex;position:relative;width:100%;overflow:auto}ch-tree-x>.ch-tree-x-container{position:absolute;inset:0}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{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-container{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
21
|
const TREE_TAG_NAME = "ch-tree-x";
|
|
@@ -37,6 +37,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
37
37
|
this.__registerHost();
|
|
38
38
|
this.droppableZoneEnter = createEvent(this, "droppableZoneEnter", 7);
|
|
39
39
|
this.expandedItemChange = createEvent(this, "expandedItemChange", 7);
|
|
40
|
+
this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
|
|
40
41
|
this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
|
|
41
42
|
this.itemsDropped = createEvent(this, "itemsDropped", 7);
|
|
42
43
|
// @todo TODO: Check if key codes works in Safari
|
|
@@ -59,7 +60,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
59
60
|
},
|
|
60
61
|
[EDIT_KEY]: event => {
|
|
61
62
|
const treeItem = getFocusedTreeItem();
|
|
62
|
-
if (!treeItem) {
|
|
63
|
+
if (!treeItem || !treeItem.editable) {
|
|
63
64
|
return;
|
|
64
65
|
}
|
|
65
66
|
event.preventDefault();
|
|
@@ -136,6 +137,19 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
136
137
|
// selected: item.selected
|
|
137
138
|
// }));
|
|
138
139
|
// }
|
|
140
|
+
handleContextMenuEvent(event) {
|
|
141
|
+
const treeItem = event.target.closest(TREE_ITEM_TAG_NAME);
|
|
142
|
+
if (!treeItem) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
event.preventDefault();
|
|
146
|
+
this.itemContextmenu.emit({
|
|
147
|
+
id: treeItem.id,
|
|
148
|
+
itemRef: treeItem,
|
|
149
|
+
metadata: treeItem.metadata,
|
|
150
|
+
contextmenuEvent: event
|
|
151
|
+
});
|
|
152
|
+
}
|
|
139
153
|
// Set edit mode in items
|
|
140
154
|
handleKeyDownEvents(event) {
|
|
141
155
|
const keyHandler = this.keyDownEvents[event.key];
|
|
@@ -264,11 +278,11 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
264
278
|
if (!itemRef) {
|
|
265
279
|
return;
|
|
266
280
|
}
|
|
267
|
-
let parentItem = itemRef.parentElement
|
|
281
|
+
let parentItem = itemRef.parentElement;
|
|
268
282
|
// Expand all parents
|
|
269
283
|
while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
|
|
270
284
|
parentItem.expanded = true;
|
|
271
|
-
parentItem = parentItem.parentElement
|
|
285
|
+
parentItem = parentItem.parentElement;
|
|
272
286
|
}
|
|
273
287
|
// Wait until the parents are expanded
|
|
274
288
|
requestAnimationFrame(() => {
|
|
@@ -398,7 +412,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
398
412
|
}
|
|
399
413
|
getDirectParentsOfDraggableItems(draggingSelectedItems) {
|
|
400
414
|
if (!draggingSelectedItems) {
|
|
401
|
-
const parentTreeItemElem = this.currentDraggedItem.parentElement
|
|
415
|
+
const parentTreeItemElem = this.currentDraggedItem.parentElement;
|
|
402
416
|
if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {
|
|
403
417
|
this.draggedParentIds.push(parentTreeItemElem.id);
|
|
404
418
|
}
|
|
@@ -447,7 +461,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
447
461
|
"ch-tree-x-not-dragging-item": !this.draggingInTheDocument,
|
|
448
462
|
"ch-tree-x--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
|
|
449
463
|
"ch-tree-x-waiting-drop-processing": this.waitDropProcessing
|
|
450
|
-
} }, h("div", { role: "tree", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-x-container" }, h("slot", null)), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
|
|
464
|
+
} }, h("div", { role: "tree", part: "tree-x-container", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-x-container" }, h("slot", null)), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
|
|
451
465
|
}
|
|
452
466
|
get el() { return this; }
|
|
453
467
|
static get style() { return treeXCss; }
|
|
@@ -461,7 +475,7 @@ const ChTreeX = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
461
475
|
"clearSelectedItemsInfo": [64],
|
|
462
476
|
"scrollIntoVisible": [64],
|
|
463
477
|
"updateValidDropZone": [64]
|
|
464
|
-
}, [[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"]]]);
|
|
478
|
+
}, [[2, "contextmenu", "handleContextMenuEvent"], [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"]]]);
|
|
465
479
|
function defineCustomElement() {
|
|
466
480
|
if (typeof customElements === "undefined") {
|
|
467
481
|
return;
|
|
@@ -101,7 +101,7 @@ const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {
|
|
|
101
101
|
}
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
-
const treeXCss = "ch-tree-x{display:flex;position:relative;width:100%;overflow:auto}ch-tree-x>.ch-tree-x-container{position:absolute;inset:0}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
|
|
104
|
+
const treeXCss = "ch-tree-x{display:flex;position:relative;width:100%;overflow:auto}ch-tree-x>.ch-tree-x-container{position:absolute;inset:0}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{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-container{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%}";
|
|
105
105
|
|
|
106
106
|
const TREE_ITEM_TAG_NAME$1 = "ch-tree-x-list-item";
|
|
107
107
|
const TREE_TAG_NAME = "ch-tree-x";
|
|
@@ -122,6 +122,7 @@ const ChTreeX = class {
|
|
|
122
122
|
registerInstance(this, hostRef);
|
|
123
123
|
this.droppableZoneEnter = createEvent(this, "droppableZoneEnter", 7);
|
|
124
124
|
this.expandedItemChange = createEvent(this, "expandedItemChange", 7);
|
|
125
|
+
this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
|
|
125
126
|
this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
|
|
126
127
|
this.itemsDropped = createEvent(this, "itemsDropped", 7);
|
|
127
128
|
// @todo TODO: Check if key codes works in Safari
|
|
@@ -144,7 +145,7 @@ const ChTreeX = class {
|
|
|
144
145
|
},
|
|
145
146
|
[EDIT_KEY]: event => {
|
|
146
147
|
const treeItem = getFocusedTreeItem();
|
|
147
|
-
if (!treeItem) {
|
|
148
|
+
if (!treeItem || !treeItem.editable) {
|
|
148
149
|
return;
|
|
149
150
|
}
|
|
150
151
|
event.preventDefault();
|
|
@@ -221,6 +222,19 @@ const ChTreeX = class {
|
|
|
221
222
|
// selected: item.selected
|
|
222
223
|
// }));
|
|
223
224
|
// }
|
|
225
|
+
handleContextMenuEvent(event) {
|
|
226
|
+
const treeItem = event.target.closest(TREE_ITEM_TAG_NAME$1);
|
|
227
|
+
if (!treeItem) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
event.preventDefault();
|
|
231
|
+
this.itemContextmenu.emit({
|
|
232
|
+
id: treeItem.id,
|
|
233
|
+
itemRef: treeItem,
|
|
234
|
+
metadata: treeItem.metadata,
|
|
235
|
+
contextmenuEvent: event
|
|
236
|
+
});
|
|
237
|
+
}
|
|
224
238
|
// Set edit mode in items
|
|
225
239
|
handleKeyDownEvents(event) {
|
|
226
240
|
const keyHandler = this.keyDownEvents[event.key];
|
|
@@ -349,11 +363,11 @@ const ChTreeX = class {
|
|
|
349
363
|
if (!itemRef) {
|
|
350
364
|
return;
|
|
351
365
|
}
|
|
352
|
-
let parentItem = itemRef.parentElement
|
|
366
|
+
let parentItem = itemRef.parentElement;
|
|
353
367
|
// Expand all parents
|
|
354
368
|
while (parentItem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
|
|
355
369
|
parentItem.expanded = true;
|
|
356
|
-
parentItem = parentItem.parentElement
|
|
370
|
+
parentItem = parentItem.parentElement;
|
|
357
371
|
}
|
|
358
372
|
// Wait until the parents are expanded
|
|
359
373
|
requestAnimationFrame(() => {
|
|
@@ -483,7 +497,7 @@ const ChTreeX = class {
|
|
|
483
497
|
}
|
|
484
498
|
getDirectParentsOfDraggableItems(draggingSelectedItems) {
|
|
485
499
|
if (!draggingSelectedItems) {
|
|
486
|
-
const parentTreeItemElem = this.currentDraggedItem.parentElement
|
|
500
|
+
const parentTreeItemElem = this.currentDraggedItem.parentElement;
|
|
487
501
|
if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME$1) {
|
|
488
502
|
this.draggedParentIds.push(parentTreeItemElem.id);
|
|
489
503
|
}
|
|
@@ -532,34 +546,21 @@ const ChTreeX = class {
|
|
|
532
546
|
"ch-tree-x-not-dragging-item": !this.draggingInTheDocument,
|
|
533
547
|
"ch-tree-x--dragging-selected-items": this.draggingInTree && this.draggingSelectedItems,
|
|
534
548
|
"ch-tree-x-waiting-drop-processing": this.waitDropProcessing
|
|
535
|
-
} }, h("div", { role: "tree", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-x-container" }, h("slot", null)), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
|
|
549
|
+
} }, h("div", { role: "tree", part: "tree-x-container", "aria-multiselectable": this.multiSelection.toString(), class: "ch-tree-x-container" }, h("slot", null)), this.draggingInTree && (h("span", { "aria-hidden": "true", class: "ch-tree-x-drag-info" }, this.dragInfo))));
|
|
536
550
|
}
|
|
537
551
|
get el() { return getElement(this); }
|
|
538
552
|
};
|
|
539
553
|
ChTreeX.style = treeXCss;
|
|
540
554
|
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
const ChTreeListX = class {
|
|
544
|
-
constructor(hostRef) {
|
|
545
|
-
registerInstance(this, hostRef);
|
|
546
|
-
}
|
|
547
|
-
render() {
|
|
548
|
-
return (h(Host, { role: "group" }, h("slot", null)));
|
|
549
|
-
}
|
|
550
|
-
get el() { return getElement(this); }
|
|
551
|
-
};
|
|
552
|
-
ChTreeListX.style = treeXListCss;
|
|
553
|
-
|
|
554
|
-
const treeXListItemCss = ":where(button){all:unset;display:flex;user-select:none;touch-action:manipulation;-webkit-user-drag:element}*,::before,::after{box-sizing:border-box}:host{--checkbox-size:1em;--expandable-button-width:0.75em;--ch-tree-x-list-item-dashed-line--offset:0px;--tab-width:calc(\n var(--checkbox-size) + var(--expandable-button-width) +\n (5px * 2)\n );display:grid;grid-template-rows:min-content;overflow:hidden}.header{--own-offset:0px;display:flex;align-items:center;min-height:calc(1em + 6px);padding-inline-start:var(--padding-inline-start)}.header--disabled{opacity:0.5;pointer-events:none}.header--even{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width)\n )}.header--even+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width)\n )}.header--even .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--even-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--even-expandable+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--odd{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width)\n )}.header--odd+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width)\n )}.header--odd .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--odd-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--odd-expandable+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--level-0{--padding-inline-start:0px}.header--level-0+.expandable{--parent-padding-inline-start--even:0px}.header--expandable-offset{--own-offset:calc(\n var(--expandable-button-width) + 5px\n )}.header--expandable-offset+.expandable{--parent-expandable-offset:calc(var(--expandable-button-width) / 2)}.header--checkbox-offset+.expandable{--parent-checkbox-offset:calc(var(--checkbox-size) / 2);--parent-negative-checkbox-offset:calc(var(--checkbox-size) / 2)}.dashed-line{position:absolute;inset-inline-start:calc( var(--inset-inline-start) + var(--ch-tree-x-list-item-dashed-line--offset) );height:1px;width:calc( var(--tab-width) - var(--parent-checkbox-offset) - var(--parent-expandable-offset) - var(--own-offset) - var(--ch-tree-x-list-item-dashed-line--offset) - 4px );border:0 dashed color-mix(in srgb, currentColor 65%, transparent);border-block-end-width:1px;pointer-events:none;content-visibility:hidden;z-index:1}.last-all-line{inset-block-start:0;height:calc(100% - var(--distance-to-checkbox));border-inline-start-width:1px;border-end-start-radius:2px}.last-line{inset-block-start:0;height:100%;border-inline-start-width:1px;border-style:solid;border-block-end:unset}.expandable-button{display:grid;place-items:center;width:var(--expandable-button-width);height:var(--expandable-button-width);margin-inline-end:5px;z-index:1;cursor:pointer;content-visibility:auto;contain-intrinsic-size:auto var(--expandable-button-width)}.expandable-button::before{content:\"\";width:calc(100% - 2px);height:calc(100% - 2px);background-color:currentColor;-webkit-mask-size:calc(var(--expandable-button-width) - 2px)}.expandable-button--collapsed::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H8.54v5.61h-1V8.5H1.93v-1H7.54V1.89h1V7.5h5.61Z\"/></svg>')}.expandable-button--expanded::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H1.93v-1H14.15Z\"/></svg>')}.expandable-button:focus-visible{outline:1px solid #000}.checkbox{margin-inline-end:5px}.checkbox::part(container){width:var(--checkbox-size);height:var(--checkbox-size)}.action{display:grid;grid-template:\"left-img text right-img\"/max-content 1fr max-content;align-items:center;height:100%;flex:1;cursor:pointer}.readonly-mode{padding-block:0.75px}.left-img,.right-img{display:block;width:0.875em;height:0.875em;content-visibility:auto;contain-intrinsic-size:auto 0.875em}.left-img{grid-area:left-img;margin-inline-end:5px}.right-img{grid-area:right-img;margin-inline-start:5px}.edit-name{grid-area:text;width:100%;height:100%;padding:0;margin:0;background-color:unset;color:unset;border:1px solid currentColor;font:unset;outline:unset}.downloading{width:0.75em;height:0.75em;margin-inline-start:8px;border:2px solid currentColor;border-inline-start-color:transparent;border-radius:50%;opacity:0.75;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.expandable{--parent-expandable-offset:0px;--parent-negative-checkbox-offset:0px;--parent-checkbox-offset:0px;display:grid;grid-template-rows:0fr;content-visibility:auto;contain-intrinsic-size:auto 100px}.expanded{grid-template-rows:1fr}:not(.expanded) ::slotted([slot=tree]){display:none;overflow:hidden;content-visibility:hidden}";
|
|
555
|
+
const treeXListItemCss = ":where(button){all:unset;display:flex;user-select:none;touch-action:manipulation;-webkit-user-drag:element}*,::before,::after{box-sizing:border-box}:host{--checkbox-size:1em;--expandable-button-width:0.75em;--ch-tree-x-list-item-dashed-line--offset:0px;--tab-width:calc(\n var(--checkbox-size) + var(--expandable-button-width) +\n (5px * 2)\n );display:grid;grid-template-rows:min-content;overflow:hidden}.header{--own-offset:0px;display:flex;align-items:center;min-height:calc(1em + 6px);padding-inline-start:var(--padding-inline-start)}.header--disabled{opacity:0.5;pointer-events:none}.header--even{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width)\n )}.header--even+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width)\n )}.header--even .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--even-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--even-expandable+.expandable{--parent-padding-inline-start--even:calc(\n var(--parent-padding-inline-start--odd, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--odd{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width)\n )}.header--odd+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width)\n )}.header--odd .dashed-line{--inset-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) +\n var(--parent-checkbox-offset) + var(--parent-expandable-offset)\n )}.header--odd-expandable{--padding-inline-start:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--odd-expandable+.expandable{--parent-padding-inline-start--odd:calc(\n var(--parent-padding-inline-start--even, 0px) + var(--tab-width) - calc(\n var(--expandable-button-width) + 5px\n )\n )}.header--level-0{--padding-inline-start:0px}.header--level-0+.expandable{--parent-padding-inline-start--even:0px}.header--expandable-offset{--own-offset:calc(\n var(--expandable-button-width) + 5px\n )}.header--expandable-offset+.expandable{--parent-expandable-offset:calc(var(--expandable-button-width) / 2)}.header--checkbox-offset+.expandable{--parent-checkbox-offset:calc(var(--checkbox-size) / 2);--parent-negative-checkbox-offset:calc(var(--checkbox-size) / 2)}.dashed-line{position:absolute;inset-inline-start:calc( var(--inset-inline-start) + var(--ch-tree-x-list-item-dashed-line--offset) );height:1px;width:calc( var(--tab-width) - var(--parent-checkbox-offset) - var(--parent-expandable-offset) - var(--own-offset) - var(--ch-tree-x-list-item-dashed-line--offset) - 4px );border:0 dashed color-mix(in srgb, currentColor 65%, transparent);border-block-end-width:1px;pointer-events:none;content-visibility:hidden;z-index:1}.last-all-line{inset-block-start:0;height:calc(100% - var(--distance-to-checkbox));border-inline-start-width:1px;border-end-start-radius:2px}.last-line{inset-block-start:0;height:100%;border-inline-start-width:1px;border-style:solid;border-block-end:unset}.expandable-button{display:grid;place-items:center;width:var(--expandable-button-width);height:var(--expandable-button-width);margin-inline-end:5px;z-index:1;cursor:pointer;content-visibility:auto;contain-intrinsic-size:auto var(--expandable-button-width)}.expandable-button::before{content:\"\";width:calc(100% - 2px);height:calc(100% - 2px);background-color:currentColor;-webkit-mask-size:calc(var(--expandable-button-width) - 2px)}.expandable-button--collapsed::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H8.54v5.61h-1V8.5H1.93v-1H7.54V1.89h1V7.5h5.61Z\"/></svg>')}.expandable-button--expanded::before{-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H1.93v-1H14.15Z\"/></svg>')}.expandable-button:focus-visible{outline:1px solid #000}.checkbox{margin-inline-end:5px}.checkbox::part(container){width:var(--checkbox-size);height:var(--checkbox-size)}.action{display:grid;grid-template:\"left-img text right-img\"/max-content 1fr max-content;align-items:center;height:100%;flex:1;cursor:pointer}.readonly-mode{padding-block:0.75px}.left-img,.right-img{display:block;width:0.875em;height:0.875em;content-visibility:auto;contain-intrinsic-size:auto 0.875em}.left-img{grid-area:left-img;margin-inline-end:5px}.right-img{grid-area:right-img;margin-inline-start:5px}.edit-name{grid-area:text;width:100%;height:100%;padding:0;margin:0;background-color:unset;color:unset;border:1px solid currentColor;font:unset;outline:unset}.downloading{width:0.75em;height:0.75em;margin-inline-start:8px;border:2px solid currentColor;border-inline-start-color:transparent;border-radius:50%;opacity:0.75;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.expandable{--parent-expandable-offset:0px;--parent-negative-checkbox-offset:0px;--parent-checkbox-offset:0px;display:grid;grid-auto-rows:min-content;position:relative;content-visibility:auto;contain-intrinsic-size:auto 100px}.expandable--collapsed{display:none;overflow:hidden;content-visibility:hidden}";
|
|
555
556
|
|
|
556
557
|
const resetDragImage = new Image();
|
|
557
558
|
const INITIAL_LEVEL = 0;
|
|
558
559
|
// Selectors
|
|
559
560
|
const TREE_ITEM_TAG_NAME = "ch-tree-x-list-item";
|
|
560
|
-
const DIRECT_TREE_ITEM_CHILDREN = `:scope
|
|
561
|
+
const DIRECT_TREE_ITEM_CHILDREN = `:scope>${TREE_ITEM_TAG_NAME}`;
|
|
561
562
|
const FIRST_ENABLED_SUB_ITEM = `${TREE_ITEM_TAG_NAME}:not([disabled])`;
|
|
562
|
-
const LAST_SUB_ITEM = `:scope
|
|
563
|
+
const LAST_SUB_ITEM = `:scope>${TREE_ITEM_TAG_NAME}:last-child`;
|
|
563
564
|
// Keys
|
|
564
565
|
const EXPANDABLE_ID = "expandable";
|
|
565
566
|
const ENTER_KEY = "Enter";
|
|
@@ -583,6 +584,7 @@ const ChTreeXListItem = class {
|
|
|
583
584
|
this.itemDragEnd = createEvent(this, "itemDragEnd", 7);
|
|
584
585
|
this.loadLazyContent = createEvent(this, "loadLazyContent", 7);
|
|
585
586
|
this.modifyCaption = createEvent(this, "modifyCaption", 7);
|
|
587
|
+
this.openReference = createEvent(this, "openReference", 7);
|
|
586
588
|
this.selectedItemChange = createEvent(this, "selectedItemChange", 7);
|
|
587
589
|
this.selectedItemSync = createEvent(this, "selectedItemSync", 7);
|
|
588
590
|
/**
|
|
@@ -729,16 +731,15 @@ const ChTreeXListItem = class {
|
|
|
729
731
|
this.expanded = !this.expanded;
|
|
730
732
|
}
|
|
731
733
|
this.selected = true;
|
|
732
|
-
this.selectedItemChange.emit(this.getSelectedInfo(mouseEventModifierKey(event),
|
|
734
|
+
this.selectedItemChange.emit(this.getSelectedInfo(mouseEventModifierKey(event), true));
|
|
733
735
|
};
|
|
734
|
-
this.getSelectedInfo = (ctrlKeyPressed,
|
|
736
|
+
this.getSelectedInfo = (ctrlKeyPressed, selected) => ({
|
|
735
737
|
ctrlKeyPressed: ctrlKeyPressed,
|
|
736
738
|
expanded: this.expanded,
|
|
737
|
-
goToReference: goToReference,
|
|
738
739
|
id: this.el.id,
|
|
739
740
|
itemRef: this.el,
|
|
740
741
|
metadata: this.metadata,
|
|
741
|
-
parentId: this.el.parentElement.
|
|
742
|
+
parentId: this.el.parentElement.id,
|
|
742
743
|
selected: selected
|
|
743
744
|
});
|
|
744
745
|
this.handleActionDblClick = (event) => {
|
|
@@ -747,8 +748,11 @@ const ChTreeXListItem = class {
|
|
|
747
748
|
this.toggleSelected();
|
|
748
749
|
return;
|
|
749
750
|
}
|
|
751
|
+
this.emitOpenReference();
|
|
750
752
|
// The Control key is not pressed, so the control can be expanded
|
|
751
|
-
this.
|
|
753
|
+
if (!this.leaf) {
|
|
754
|
+
this.toggleExpand(event);
|
|
755
|
+
}
|
|
752
756
|
};
|
|
753
757
|
/**
|
|
754
758
|
* Event triggered by the following actions on the main button:
|
|
@@ -768,6 +772,7 @@ const ChTreeXListItem = class {
|
|
|
768
772
|
this.toggleOrSelect(event);
|
|
769
773
|
return;
|
|
770
774
|
}
|
|
775
|
+
this.emitOpenReference();
|
|
771
776
|
// Enter or space
|
|
772
777
|
this.toggleExpand(event);
|
|
773
778
|
};
|
|
@@ -853,7 +858,6 @@ const ChTreeXListItem = class {
|
|
|
853
858
|
}
|
|
854
859
|
handleSelectedChange(newValue) {
|
|
855
860
|
this.selectedItemSync.emit(this.getSelectedInfo(true, // Does not matter in this case
|
|
856
|
-
false, // Does not matter in this case
|
|
857
861
|
newValue));
|
|
858
862
|
}
|
|
859
863
|
handleShowLinesChange(newShowLines) {
|
|
@@ -917,8 +921,7 @@ const ChTreeXListItem = class {
|
|
|
917
921
|
return;
|
|
918
922
|
}
|
|
919
923
|
// Otherwise, ask the parent to focus the next sibling
|
|
920
|
-
const parentItem = this.el.parentElement
|
|
921
|
-
.parentElement;
|
|
924
|
+
const parentItem = this.el.parentElement;
|
|
922
925
|
parentItem.focusNextSibling(ctrlKeyPressed);
|
|
923
926
|
}
|
|
924
927
|
/**
|
|
@@ -938,8 +941,7 @@ const ChTreeXListItem = class {
|
|
|
938
941
|
return;
|
|
939
942
|
}
|
|
940
943
|
// Otherwise, set focus in the parent element
|
|
941
|
-
const parentItem = this.el.parentElement
|
|
942
|
-
.parentElement;
|
|
944
|
+
const parentItem = this.el.parentElement;
|
|
943
945
|
// Check if the parent is not disabled
|
|
944
946
|
if (parentItem.disabled) {
|
|
945
947
|
parentItem.focusPreviousItem(ctrlKeyPressed);
|
|
@@ -977,7 +979,7 @@ const ChTreeXListItem = class {
|
|
|
977
979
|
this.headerRef.focus();
|
|
978
980
|
// Normal navigation auto selects the item.
|
|
979
981
|
if (!ctrlKeyPressed) {
|
|
980
|
-
this.setSelected(
|
|
982
|
+
this.setSelected();
|
|
981
983
|
}
|
|
982
984
|
}
|
|
983
985
|
getDirectTreeItems() {
|
|
@@ -1010,34 +1012,41 @@ const ChTreeXListItem = class {
|
|
|
1010
1012
|
toggleSelected() {
|
|
1011
1013
|
const selected = !this.selected;
|
|
1012
1014
|
this.selected = selected;
|
|
1013
|
-
this.selectedItemChange.emit(this.getSelectedInfo(true,
|
|
1015
|
+
this.selectedItemChange.emit(this.getSelectedInfo(true, selected));
|
|
1014
1016
|
}
|
|
1015
|
-
setSelected(
|
|
1017
|
+
setSelected() {
|
|
1016
1018
|
this.selected = true;
|
|
1017
|
-
this.selectedItemChange.emit(this.getSelectedInfo(false,
|
|
1019
|
+
this.selectedItemChange.emit(this.getSelectedInfo(false, true));
|
|
1018
1020
|
}
|
|
1019
1021
|
toggleOrSelect(event) {
|
|
1020
1022
|
if (mouseEventModifierKey(event)) {
|
|
1021
1023
|
this.toggleSelected();
|
|
1022
1024
|
}
|
|
1023
1025
|
else {
|
|
1024
|
-
this.setSelected(
|
|
1026
|
+
this.setSelected();
|
|
1025
1027
|
}
|
|
1026
1028
|
}
|
|
1029
|
+
emitOpenReference() {
|
|
1030
|
+
this.openReference.emit({
|
|
1031
|
+
id: this.el.id,
|
|
1032
|
+
leaf: this.leaf,
|
|
1033
|
+
metadata: this.metadata
|
|
1034
|
+
});
|
|
1035
|
+
}
|
|
1027
1036
|
componentWillLoad() {
|
|
1028
|
-
const
|
|
1037
|
+
const parentElementItem = this.el
|
|
1038
|
+
.parentElement;
|
|
1029
1039
|
// Check if must lazy load
|
|
1030
1040
|
this.lazyLoadItems(this.expanded);
|
|
1031
1041
|
// Sync selected state with the main tree
|
|
1032
1042
|
if (this.selected) {
|
|
1033
|
-
this.selectedItemChange.emit(this.getSelectedInfo(true,
|
|
1043
|
+
this.selectedItemChange.emit(this.getSelectedInfo(true, true));
|
|
1034
1044
|
}
|
|
1035
1045
|
// No need to update more the status
|
|
1036
1046
|
if (this.level === INITIAL_LEVEL) {
|
|
1037
1047
|
return;
|
|
1038
1048
|
}
|
|
1039
1049
|
// Update checkbox status
|
|
1040
|
-
const parentElementItem = parentElement.parentElement;
|
|
1041
1050
|
if (parentElementItem.checkbox) {
|
|
1042
1051
|
this.checked = parentElementItem.checked;
|
|
1043
1052
|
}
|
|
@@ -1093,14 +1102,17 @@ const ChTreeXListItem = class {
|
|
|
1093
1102
|
h("div", { class: {
|
|
1094
1103
|
action: true,
|
|
1095
1104
|
"readonly-mode": !this.editing
|
|
1096
|
-
}, part: `action
|
|
1105
|
+
}, part: `action${!this.editing ? " readonly-mode" : ""}${!this.leaf && this.expanded ? " expanded" : ""}`, onDblClick: !this.editing ? this.handleActionDblClick : null }, this.leftImgSrc && this.renderImg("left-img", this.leftImgSrc), this.editable && this.editing ? (h("input", { class: "edit-name", part: "edit-name", disabled: this.disabled, type: "text", value: this.caption, onBlur: this.removeEditMode(false), onKeyDown: this.checkIfShouldRemoveEditMode, ref: el => (this.inputRef = el) })) : (this.caption), this.rightImgSrc &&
|
|
1097
1106
|
this.renderImg("right-img", this.rightImgSrc)),
|
|
1098
1107
|
this.showDownloadingSpinner && !this.leaf && this.downloading && (h("div", { class: "downloading", part: "downloading" }))
|
|
1099
1108
|
]), (showAllLines || showLastLine) && (h("div", { class: {
|
|
1100
1109
|
"dashed-line": true,
|
|
1101
1110
|
"last-all-line": showAllLines && this.lastItem,
|
|
1102
1111
|
"last-line": showLastLine
|
|
1103
|
-
}, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (h("div", { "aria-busy": this.downloading.toString(), "aria-live": this.downloading ? "polite" : null, id: EXPANDABLE_ID, class: {
|
|
1112
|
+
}, part: `dashed-line${this.lastItem ? " last-all-line" : ""}` }))), hasContent && (h("div", { role: "group", "aria-busy": this.downloading.toString(), "aria-live": this.downloading ? "polite" : null, id: EXPANDABLE_ID, class: {
|
|
1113
|
+
expandable: true,
|
|
1114
|
+
"expandable--collapsed": !this.expanded
|
|
1115
|
+
}, part: `expandable${this.expanded ? " expanded" : " collapsed"}` }, h("slot", null)))));
|
|
1104
1116
|
}
|
|
1105
1117
|
get el() { return getElement(this); }
|
|
1106
1118
|
static get watchers() { return {
|
|
@@ -1114,4 +1126,4 @@ const ChTreeXListItem = class {
|
|
|
1114
1126
|
};
|
|
1115
1127
|
ChTreeXListItem.style = treeXListItemCss;
|
|
1116
1128
|
|
|
1117
|
-
export { CheckBox as ch_checkbox, ChTreeX as ch_tree_x,
|
|
1129
|
+
export { CheckBox as ch_checkbox, ChTreeX as ch_tree_x, ChTreeXListItem as ch_tree_x_list_item };
|
|
@@ -198,7 +198,7 @@ const ChSuggest = class {
|
|
|
198
198
|
windowClosedHandler() {
|
|
199
199
|
this.textInput.focus();
|
|
200
200
|
this.windowHidden = true;
|
|
201
|
-
this.
|
|
201
|
+
this.slot.innerHTML = "";
|
|
202
202
|
}
|
|
203
203
|
// 9.PUBLIC METHODS API //
|
|
204
204
|
/**
|
|
@@ -210,7 +210,7 @@ const ChSuggest = class {
|
|
|
210
210
|
}
|
|
211
211
|
// 10.RENDER() FUNCTION //
|
|
212
212
|
render() {
|
|
213
|
-
return (h(Host, null, h("div", { class: "main-wrapper", part: "main-wrapper" }, h("div", { class: "label-input-wrapper", part: "label-input-wrapper" }, this.showLabel && this.label && (h("label", { id: "label", htmlFor: "input", part: "label" }, this.label)), h("input", { type: "text", id: "input", part: "input", class: "input", ref: el => (this.textInput = el), onInput: this.handleInput, onKeyDown: this.handleKeyDown, onFocus: this.onFocusHandler, value: this.value, autocomplete: "off", "aria-controls": "ch-window", "aria-label": !this.showLabel && this.label ? this.label : undefined, "aria-labelledby": this.showLabel && this.label ? "label" : undefined, "aria-expanded": this.windowHidden.toString() })), h("ch-window", { id: "ch-window", container: this.textInput, "close-on-outside-click": true, "close-on-escape": true, xAlign: "inside-start", yAlign: "outside-end", ref: el => (this.chWindow = el), showHeader: this.showHeader, caption: this.suggestTitle, exportparts: "\n header:header, \n caption:title, \n close:close-button,\n window:dropdown" }, h("slot", { onSlotchange: this.evaluateSlotIsEmpty })))));
|
|
213
|
+
return (h(Host, null, h("div", { class: "main-wrapper", part: "main-wrapper" }, h("div", { class: "label-input-wrapper", part: "label-input-wrapper" }, this.showLabel && this.label && (h("label", { id: "label", htmlFor: "input", part: "label" }, this.label)), h("input", { type: "text", id: "input", part: "input", class: "input", ref: el => (this.textInput = el), onInput: this.handleInput, onKeyDown: this.handleKeyDown, onFocus: this.onFocusHandler, value: this.value, autocomplete: "off", "aria-controls": "ch-window", "aria-label": !this.showLabel && this.label ? this.label : undefined, "aria-labelledby": this.showLabel && this.label ? "label" : undefined, "aria-expanded": this.windowHidden.toString() })), h("ch-window", { id: "ch-window", container: this.textInput, "close-on-outside-click": true, "close-on-escape": true, xAlign: "inside-start", yAlign: "outside-end", ref: el => (this.chWindow = el), showHeader: this.showHeader, caption: this.suggestTitle, exportparts: "\n header:header, \n caption:title, \n close:close-button,\n window:dropdown" }, h("slot", { onSlotchange: this.evaluateSlotIsEmpty, ref: el => (this.slot = el) })))));
|
|
214
214
|
}
|
|
215
215
|
static get delegatesFocus() { return true; }
|
|
216
216
|
get el() { return getElement(this); }
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { h, r as registerInstance, H as Host } from './index-0da01575.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @description This function converts SelectorCategoryData[] SuggestData
|
|
5
|
+
*/
|
|
6
|
+
const convertObjectDataToSuggestData = (selectorCategoriesData) => {
|
|
7
|
+
const suggestData = {
|
|
8
|
+
suggestItems: null,
|
|
9
|
+
suggestLists: []
|
|
10
|
+
};
|
|
11
|
+
if (selectorCategoriesData.length) {
|
|
12
|
+
selectorCategoriesData.forEach(selectorCategory => {
|
|
13
|
+
const suggestList = {
|
|
14
|
+
label: selectorCategory.name,
|
|
15
|
+
items: []
|
|
16
|
+
};
|
|
17
|
+
selectorCategory.items.forEach((objectData) => {
|
|
18
|
+
const suggestItem = {
|
|
19
|
+
value: objectData.id,
|
|
20
|
+
description: objectData.description,
|
|
21
|
+
icon: objectData.icon
|
|
22
|
+
};
|
|
23
|
+
suggestList.items.push(suggestItem);
|
|
24
|
+
});
|
|
25
|
+
suggestData.suggestLists.push(suggestList);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return suggestData;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
32
|
+
const renderSuggestLists = (suggestData) => {
|
|
33
|
+
if (suggestData === null || suggestData === void 0 ? void 0 : suggestData.suggestLists.length) {
|
|
34
|
+
const randomNumber = Math.random();
|
|
35
|
+
const result = suggestData.suggestLists.map((list) => {
|
|
36
|
+
return (h("ch-suggest-list", { label: list.label, key: randomNumber }, list.items.map((item) => {
|
|
37
|
+
return renderSuggestListsItem(item);
|
|
38
|
+
})));
|
|
39
|
+
});
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
};
|
|
44
|
+
const renderSuggestListsItem = (suggestItem) => {
|
|
45
|
+
return (h("ch-suggest-list-item", { value: suggestItem.value }, [suggestItem.description || suggestItem.value]));
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const testSuggestCss = ":host{display:block}:root{--highlight-color:rgb(163, 25, 161)}ch-suggest{display:block}ch-suggest::part(title){display:block;font-weight:bold}ch-suggest::part(label){font-weight:500}ch-suggest[label-position=\"start\"]::part(label){margin-inline-end:8px;display:flex;align-items:center}ch-suggest[label-position=\"above\"]::part(label){margin-block-end:4px}ch-suggest::part(close-button){display:block;width:16px;height:16px}ch-suggest::part(close-button)::after{content:\"✖\";line-height:8px;height:100%;display:block;border:1px solid black;cursor:pointer;text-align:center;line-height:16px}ch-suggest::part(header){display:flex;justify-content:space-between;align-items:center;margin-block-end:8px}ch-suggest::part(ch-window-close){width:10px;height:10px}ch-suggest::part(input){padding:4px 8px;border:1px solid black}ch-suggest::part(input):focus{outline:2px solid var(--highlight-color);border-color:var(--highlight-color)}ch-suggest-list{background-color:rgba(234, 234, 234, 0.224);border:1px solid rgba(128, 128, 128, 0.275);border-radius:4px;padding:8px;margin-block-end:4px}ch-suggest-list::part(title){font-size:14px;font-weight:bold;text-transform:uppercase;margin:4px 0 8px 0}ch-suggest-list-item::part(button){padding:4px 8px;cursor:pointer;gap:4px}ch-suggest-list-item ch-icon{--icon-size:16px;margin-inline-end:2px}ch-suggest-list-item:hover{background-color:var(--ch-color--violet-100)}ch-suggest-list-item:focus,ch-suggest-list-item[selected]:focus{outline:2px solid var(--highlight-color)}ch-suggest-list-item[selected]{background-color:rgba(241, 184, 243, 0.42);outline:none}ch-suggest-list-item::part(button):focus{outline:2px solid var(--highlight-color);border-color:var(--highlight-color)}ch-suggest-list-item::part(content-wrapper){display:flex;gap:8px}ch-suggest::part(dropdown){margin-block-start:4px;border:1px solid black;background-color:white;padding:8px}:focus{outline-style:none !important}";
|
|
49
|
+
|
|
50
|
+
const ChTestSuggest = class {
|
|
51
|
+
constructor(hostRef) {
|
|
52
|
+
registerInstance(this, hostRef);
|
|
53
|
+
// 5.EVENTS (EMIT) //
|
|
54
|
+
// 6.COMPONENT LIFECYCLE EVENTS //
|
|
55
|
+
// 7.LISTENERS //
|
|
56
|
+
// 8.PUBLIC METHODS API //
|
|
57
|
+
// 9.LOCAL METHODS //
|
|
58
|
+
/**
|
|
59
|
+
* This handler gets fired every time the value of the 'Select Object' ch-suggest changes.
|
|
60
|
+
*/
|
|
61
|
+
this.selectObjectValueChangedHandler = async (e) => {
|
|
62
|
+
const value = e.detail;
|
|
63
|
+
this.selectorSourceCallback(value)
|
|
64
|
+
.then(result => {
|
|
65
|
+
/* show suggestions*/
|
|
66
|
+
this.objectsSuggestions = convertObjectDataToSuggestData(result);
|
|
67
|
+
})
|
|
68
|
+
.catch(() => {
|
|
69
|
+
// to do
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// 10.RENDER() FUNCTION //
|
|
74
|
+
render() {
|
|
75
|
+
return (h(Host, null, h("ch-suggest", { onValueChanged: this.selectObjectValueChangedHandler, part: "object-selector-suggest", exportparts: "dropdown:select-object-dropdown" }, renderSuggestLists(this.objectsSuggestions))));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
ChTestSuggest.style = testSuggestCss;
|
|
79
|
+
|
|
80
|
+
export { ChTestSuggest as ch_test_suggest };
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import { r as registerInstance, h, f as forceUpdate
|
|
1
|
+
import { r as registerInstance, c as createEvent, h, f as forceUpdate } from './index-0da01575.js';
|
|
2
2
|
|
|
3
3
|
const testTreeXCss = "ch-test-tree-x{display:contents}";
|
|
4
4
|
|
|
5
5
|
const DEFAULT_DRAG_DISABLED_VALUE = false;
|
|
6
6
|
const DEFAULT_DROP_DISABLED_VALUE = false;
|
|
7
7
|
const DEFAULT_CLASS_VALUE = "tree-view-item";
|
|
8
|
+
const DEFAULT_EDITABLE_ITEMS_VALUE = true;
|
|
8
9
|
const DEFAULT_EXPANDED_VALUE = false;
|
|
9
10
|
const DEFAULT_INDETERMINATE_VALUE = false;
|
|
10
11
|
const DEFAULT_LAZY_VALUE = false;
|
|
12
|
+
const DEFAULT_ORDER_VALUE = 0;
|
|
11
13
|
const DEFAULT_SELECTED_VALUE = false;
|
|
12
14
|
const ChTestTreeX = class {
|
|
13
15
|
constructor(hostRef) {
|
|
14
16
|
registerInstance(this, hostRef);
|
|
17
|
+
this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
|
|
18
|
+
this.itemOpenReference = createEvent(this, "itemOpenReference", 7);
|
|
19
|
+
this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
|
|
15
20
|
// UI Models
|
|
16
21
|
this.flattenedTreeModel = new Map();
|
|
17
22
|
this.selectedItems = new Set();
|
|
18
|
-
this.flattenedLazyTreeModel = new Map();
|
|
19
23
|
/**
|
|
20
24
|
* This property lets you specify if the tree is waiting to process the drop
|
|
21
25
|
* of items.
|
|
@@ -23,12 +27,12 @@ const ChTestTreeX = class {
|
|
|
23
27
|
this.waitDropProcessing = false;
|
|
24
28
|
/**
|
|
25
29
|
* This attribute lets you specify if the drag operation is disabled in all
|
|
26
|
-
* items by default. If `true`, the
|
|
30
|
+
* items by default. If `true`, the items can't be dragged.
|
|
27
31
|
*/
|
|
28
32
|
this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;
|
|
29
33
|
/**
|
|
30
34
|
* This attribute lets you specify if the drop operation is disabled in all
|
|
31
|
-
* items by default. If `true`, the
|
|
35
|
+
* items by default. If `true`, the items won't accept any drops.
|
|
32
36
|
*/
|
|
33
37
|
this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;
|
|
34
38
|
/**
|
|
@@ -39,6 +43,11 @@ const ChTestTreeX = class {
|
|
|
39
43
|
* Set this attribute if you want to allow multi selection of the items.
|
|
40
44
|
*/
|
|
41
45
|
this.multiSelection = false;
|
|
46
|
+
/**
|
|
47
|
+
* This attribute lets you specify if the edit operation is enabled in all
|
|
48
|
+
* items by default. If `true`, the items can edit its caption in place.
|
|
49
|
+
*/
|
|
50
|
+
this.editableItems = DEFAULT_EDITABLE_ITEMS_VALUE;
|
|
42
51
|
/**
|
|
43
52
|
* `true` to display the relation between tree items and tree lists using
|
|
44
53
|
* lines.
|
|
@@ -58,6 +67,7 @@ const ChTestTreeX = class {
|
|
|
58
67
|
});
|
|
59
68
|
};
|
|
60
69
|
this.handleSelectedItemsChange = (event) => {
|
|
70
|
+
event.stopPropagation();
|
|
61
71
|
const itemsToProcess = new Map(event.detail);
|
|
62
72
|
// Remove no longer selected items
|
|
63
73
|
this.selectedItems.forEach(selectedItemId => {
|
|
@@ -81,12 +91,17 @@ const ChTestTreeX = class {
|
|
|
81
91
|
newSelectedItem.expanded = newSelectedItemInfo.expanded;
|
|
82
92
|
this.selectedItems.add(itemId);
|
|
83
93
|
});
|
|
94
|
+
this.selectedItemsChange.emit(event.detail);
|
|
84
95
|
};
|
|
85
96
|
this.handleExpandedItemChange = (event) => {
|
|
86
97
|
const detail = event.detail;
|
|
87
98
|
const itemInfo = this.flattenedTreeModel.get(detail.id).item;
|
|
88
99
|
itemInfo.expanded = detail.expanded;
|
|
89
100
|
};
|
|
101
|
+
this.handleItemContextmenu = (event) => {
|
|
102
|
+
event.stopPropagation();
|
|
103
|
+
this.itemContextmenu.emit(event.detail);
|
|
104
|
+
};
|
|
90
105
|
this.handleItemsDropped = (event) => {
|
|
91
106
|
if (!this.dropItemsCallback) {
|
|
92
107
|
return;
|
|
@@ -151,13 +166,13 @@ const ChTestTreeX = class {
|
|
|
151
166
|
itemUIModelExtended.parentItem = newParentUIModel;
|
|
152
167
|
};
|
|
153
168
|
this.renderSubModel = (treeSubModel, lastItem, level) => {
|
|
154
|
-
var _a, _b;
|
|
155
|
-
return (h("ch-tree-x-list-item", { id: treeSubModel.id, caption: treeSubModel.caption, checkbox: treeSubModel.checkbox, checked: treeSubModel.checked, class: treeSubModel.class, disabled: treeSubModel.disabled, downloading: treeSubModel.downloading, dragDisabled: (_a = treeSubModel.dragDisabled) !== null && _a !== void 0 ? _a : this.dragDisabled, dropDisabled: (_b = treeSubModel.dropDisabled) !== null && _b !== void 0 ? _b : this.dropDisabled, expanded: treeSubModel.expanded, indeterminate: treeSubModel.indeterminate, lastItem: lastItem, lazyLoad: treeSubModel.lazy, leaf: treeSubModel.leaf, leftImgSrc: treeSubModel.leftImgSrc, level: level, metadata: treeSubModel.metadata, rightImgSrc: treeSubModel.rightImgSrc, selected: treeSubModel.selected, showExpandableButton: treeSubModel.showExpandableButton, showLines: this.showLines, toggleCheckboxes: treeSubModel.toggleCheckboxes }, !treeSubModel.leaf &&
|
|
169
|
+
var _a, _b, _c;
|
|
170
|
+
return (h("ch-tree-x-list-item", { id: treeSubModel.id, caption: treeSubModel.caption, checkbox: treeSubModel.checkbox, checked: treeSubModel.checked, class: treeSubModel.class, disabled: treeSubModel.disabled, downloading: treeSubModel.downloading, dragDisabled: (_a = treeSubModel.dragDisabled) !== null && _a !== void 0 ? _a : this.dragDisabled, dropDisabled: (_b = treeSubModel.dropDisabled) !== null && _b !== void 0 ? _b : this.dropDisabled, editable: (_c = treeSubModel.editable) !== null && _c !== void 0 ? _c : this.editableItems, expanded: treeSubModel.expanded, indeterminate: treeSubModel.indeterminate, lastItem: lastItem, lazyLoad: treeSubModel.lazy, leaf: treeSubModel.leaf, leftImgSrc: treeSubModel.leftImgSrc, level: level, metadata: treeSubModel.metadata, rightImgSrc: treeSubModel.rightImgSrc, selected: treeSubModel.selected, showExpandableButton: treeSubModel.showExpandableButton, showLines: this.showLines, toggleCheckboxes: treeSubModel.toggleCheckboxes }, !treeSubModel.leaf &&
|
|
156
171
|
treeSubModel.items != null &&
|
|
157
|
-
treeSubModel.items.
|
|
172
|
+
treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))));
|
|
158
173
|
};
|
|
159
174
|
this.flattenItemUIModel = (parentModel) => (item) => {
|
|
160
|
-
var _a, _b, _c, _d;
|
|
175
|
+
var _a, _b, _c, _d, _e;
|
|
161
176
|
this.flattenedTreeModel.set(item.id, {
|
|
162
177
|
parentItem: parentModel,
|
|
163
178
|
item: item
|
|
@@ -168,10 +183,8 @@ const ChTestTreeX = class {
|
|
|
168
183
|
(_a = item.expanded) !== null && _a !== void 0 ? _a : (item.expanded = DEFAULT_EXPANDED_VALUE);
|
|
169
184
|
(_b = item.indeterminate) !== null && _b !== void 0 ? _b : (item.indeterminate = DEFAULT_INDETERMINATE_VALUE);
|
|
170
185
|
(_c = item.lazy) !== null && _c !== void 0 ? _c : (item.lazy = DEFAULT_LAZY_VALUE);
|
|
171
|
-
(_d = item.
|
|
172
|
-
|
|
173
|
-
this.flattenedLazyTreeModel.set(item.id, item);
|
|
174
|
-
}
|
|
186
|
+
(_d = item.order) !== null && _d !== void 0 ? _d : (item.order = DEFAULT_ORDER_VALUE);
|
|
187
|
+
(_e = item.selected) !== null && _e !== void 0 ? _e : (item.selected = DEFAULT_SELECTED_VALUE);
|
|
175
188
|
if (item.selected) {
|
|
176
189
|
this.selectedItems.add(item.id);
|
|
177
190
|
}
|
|
@@ -186,9 +199,8 @@ const ChTestTreeX = class {
|
|
|
186
199
|
* lazy state, updates the item's UI Model.
|
|
187
200
|
*/
|
|
188
201
|
async loadLazyContent(itemId, items, downloading = false, lazy = false) {
|
|
189
|
-
const itemToLazyLoadContent = this.
|
|
202
|
+
const itemToLazyLoadContent = this.flattenedTreeModel.get(itemId).item;
|
|
190
203
|
// Establish that the content was lazy loaded
|
|
191
|
-
this.flattenedLazyTreeModel.delete(itemId);
|
|
192
204
|
itemToLazyLoadContent.downloading = downloading;
|
|
193
205
|
itemToLazyLoadContent.lazy = lazy;
|
|
194
206
|
// Check if there is items to add
|
|
@@ -339,11 +351,15 @@ const ChTestTreeX = class {
|
|
|
339
351
|
}
|
|
340
352
|
});
|
|
341
353
|
}
|
|
354
|
+
handleOpenReference(event) {
|
|
355
|
+
event.stopPropagation();
|
|
356
|
+
this.itemOpenReference.emit(event.detail);
|
|
357
|
+
}
|
|
342
358
|
flattenSubModel(model) {
|
|
343
359
|
const items = model.items;
|
|
344
360
|
if (!items) {
|
|
345
361
|
// Make sure that subtrees don't have an undefined array
|
|
346
|
-
if (model.leaf
|
|
362
|
+
if (model.leaf !== true) {
|
|
347
363
|
model.items = [];
|
|
348
364
|
}
|
|
349
365
|
return;
|
|
@@ -359,14 +375,13 @@ const ChTestTreeX = class {
|
|
|
359
375
|
}
|
|
360
376
|
flattenModel() {
|
|
361
377
|
this.flattenedTreeModel.clear();
|
|
362
|
-
this.flattenedLazyTreeModel.clear();
|
|
363
378
|
this.flattenSubModel({ id: null, caption: null, items: this.treeModel });
|
|
364
379
|
}
|
|
365
380
|
componentWillLoad() {
|
|
366
381
|
this.flattenModel();
|
|
367
382
|
}
|
|
368
383
|
render() {
|
|
369
|
-
return (h(
|
|
384
|
+
return (h("ch-tree-x", { class: this.cssClass || null, multiSelection: this.multiSelection, waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.handleDroppableZoneEnter, onExpandedItemChange: this.handleExpandedItemChange, onItemContextmenu: this.handleItemContextmenu, onItemsDropped: this.handleItemsDropped, onSelectedItemsChange: this.handleSelectedItemsChange, ref: el => (this.treeRef = el) }, this.treeModel.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === this.treeModel.length - 1, 0))));
|
|
370
385
|
}
|
|
371
386
|
static get watchers() { return {
|
|
372
387
|
"treeModel": ["handleTreeModelChange"]
|