@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.
Files changed (73) hide show
  1. package/dist/cjs/{ch-checkbox_4.cjs.entry.js → ch-checkbox_3.cjs.entry.js} +54 -43
  2. package/dist/cjs/ch-suggest_4.cjs.entry.js +2 -2
  3. package/dist/cjs/ch-test-suggest.cjs.entry.js +84 -0
  4. package/dist/cjs/ch-test-tree-x.cjs.entry.js +31 -16
  5. package/dist/cjs/ch-tooltip.cjs.entry.js +85 -0
  6. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  7. package/dist/cjs/gx-ide-references.cjs.entry.js +76 -116
  8. package/dist/cjs/gx-ide-test.cjs.entry.js +51 -5
  9. package/dist/cjs/gxg-label_2.cjs.entry.js +15 -2
  10. package/dist/cjs/gxg-tree-view.cjs.entry.js +36 -14
  11. package/dist/cjs/loader.cjs.js +1 -1
  12. package/dist/collection/collection-manifest.json +2 -1
  13. package/dist/collection/common/helpers.js +3 -0
  14. package/dist/collection/components/references/helpers.js +16 -19
  15. package/dist/collection/components/references/references.css +8 -0
  16. package/dist/collection/components/references/references.js +60 -98
  17. package/dist/components/ch-suggest2.js +2 -2
  18. package/dist/components/ch-test-suggest.js +119 -0
  19. package/dist/components/ch-test-tree-x.js +38 -28
  20. package/dist/components/ch-tooltip.js +115 -0
  21. package/dist/components/gx-ide-references.js +122 -150
  22. package/dist/components/gx-ide-test.js +48 -2
  23. package/dist/components/gxg-tree-view.js +1 -434
  24. package/dist/components/index.js +2 -1
  25. package/dist/components/tooltip.js +17 -3
  26. package/dist/components/tree-view.js +453 -0
  27. package/dist/components/tree-x-list-item.js +35 -23
  28. package/dist/components/tree-x.js +21 -7
  29. package/dist/esm/{ch-checkbox_4.entry.js → ch-checkbox_3.entry.js} +55 -43
  30. package/dist/esm/ch-suggest_4.entry.js +2 -2
  31. package/dist/esm/ch-test-suggest.entry.js +80 -0
  32. package/dist/esm/ch-test-tree-x.entry.js +32 -17
  33. package/dist/esm/ch-tooltip.entry.js +81 -0
  34. package/dist/esm/genexus-ide-ui.js +1 -1
  35. package/dist/esm/gx-ide-references.entry.js +76 -116
  36. package/dist/esm/gx-ide-test.entry.js +48 -2
  37. package/dist/esm/gxg-label_2.entry.js +15 -2
  38. package/dist/esm/gxg-tree-view.entry.js +37 -15
  39. package/dist/esm/loader.js +1 -1
  40. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  41. package/dist/genexus-ide-ui/p-109209dc.entry.js +1 -0
  42. package/dist/genexus-ide-ui/p-123b8351.entry.js +1 -0
  43. package/dist/genexus-ide-ui/p-71c6da54.entry.js +1 -0
  44. package/dist/genexus-ide-ui/p-86b98a99.entry.js +1 -0
  45. package/dist/genexus-ide-ui/p-cd00ba19.entry.js +1 -0
  46. package/dist/genexus-ide-ui/p-ce9fef1a.entry.js +1 -0
  47. package/dist/genexus-ide-ui/p-d47ed4e3.entry.js +1 -0
  48. package/dist/genexus-ide-ui/p-d7b452ef.entry.js +1 -0
  49. package/dist/genexus-ide-ui/p-f62d9b6d.entry.js +1 -0
  50. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/test/test-suggest/test-suggest.css +114 -0
  51. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tooltip/tooltip.css +120 -0
  52. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/{tree-x → tree-view/tree-x}/tree-x.css +2 -3
  53. 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
  54. package/dist/node_modules/@genexus/gemini/dist/collection/components/tooltip/tooltip.css +11 -0
  55. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +58 -12
  56. package/dist/types/common/helpers.d.ts +1 -0
  57. package/dist/types/components/references/helpers.d.ts +3 -3
  58. package/dist/types/components/references/references.d.ts +7 -19
  59. package/package.json +3 -3
  60. package/dist/cjs/update-tree-model-8b154db1.js +0 -53
  61. package/dist/components/ch-tree-x-list.js +0 -6
  62. package/dist/components/tree-x-list.js +0 -31
  63. package/dist/components/update-tree-model.js +0 -50
  64. package/dist/esm/update-tree-model-6c612f05.js +0 -50
  65. package/dist/genexus-ide-ui/p-1f3a81e3.entry.js +0 -1
  66. package/dist/genexus-ide-ui/p-46d393f5.entry.js +0 -1
  67. package/dist/genexus-ide-ui/p-5669baf5.entry.js +0 -1
  68. package/dist/genexus-ide-ui/p-60b2bd2f.entry.js +0 -1
  69. package/dist/genexus-ide-ui/p-71ecc7fd.js +0 -1
  70. package/dist/genexus-ide-ui/p-c7425416.entry.js +0 -1
  71. package/dist/genexus-ide-ui/p-dd2e0590.entry.js +0 -1
  72. package/dist/genexus-ide-ui/p-ed5cf480.entry.js +0 -1
  73. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-x-list/tree-x-list.css +0 -6
@@ -2,10 +2,8 @@
2
2
  import { Host, h } from "@stencil/core";
3
3
  /* CUSTOM IMPORTS */
4
4
  import { Locale } from "../../common/locale";
5
- import { renderTreeItems } from "../../common/render-tree";
6
- import { updateTreeModel } from "../../common/update-tree-model";
7
5
  import { renderSuggestLists } from "../../common/render-suggest";
8
- import { convertObjectDataToSuggestData, convertReferenceDataToTreeData } from "./helpers";
6
+ import { convertObjectDataToSuggestData, convertReferenceDataToTreeViewData } from "./helpers";
9
7
  export class GxIdeReferences {
10
8
  constructor() {
11
9
  /**
@@ -19,16 +17,28 @@ export class GxIdeReferences {
19
17
  // 7.LISTENERS //
20
18
  // 8.PUBLIC METHODS API //
21
19
  // 9.LOCAL METHODS //
20
+ this.attachTreeEvents = () => {
21
+ // this.referencedByTreeEl.addEventListener(
22
+ // "expandedItemChange",
23
+ // (item: CustomEvent<{ id: string; expanded: boolean }>) => {
24
+ // console.log(item.detail.id);
25
+ // }
26
+ // );
27
+ // this.referencesToTreeEl.addEventListener(
28
+ // "expandedItemChange",
29
+ // (item: CustomEvent<{ id: string; expanded: boolean }>) => {
30
+ // console.log(item.detail.id);
31
+ // }
32
+ // );
33
+ };
22
34
  /**
23
35
  * It attaches on the ch-suggest, the "itemSelected" event triggered by the ch-suggest-list-item. This helps set the new 'selectedObject'.
24
36
  */
25
- this.attachSelectObjectListener = () => {
26
- this.selectObjectSuggestEl.addEventListener("itemSelected", (e) => {
27
- const categoryIndex = e.detail.indexes.listIndex;
28
- const itemIndex = e.detail.indexes.itemIndex;
29
- this.selectedObject =
30
- this.selectorCategoryData[categoryIndex].items[itemIndex];
31
- });
37
+ this.selectObjectSelectionChanged = (e) => {
38
+ const categoryIndex = e.detail.indexes.listIndex;
39
+ const itemIndex = e.detail.indexes.itemIndex;
40
+ this.selectedObject =
41
+ this.selectorCategoryData[categoryIndex].items[itemIndex];
32
42
  };
33
43
  /**
34
44
  * This handler gets fired every time the value of the 'Select Object' ch-suggest changes.
@@ -74,26 +84,16 @@ export class GxIdeReferences {
74
84
  */
75
85
  this.loadReferencesHandler = async (id, to = false) => {
76
86
  if (this.loadReferencesCallback) {
77
- /* is referenced by*/
78
- if (!to) {
79
- this.loadReferencesCallback(id, false)
80
- .then(result => {
81
- this.referencedByTreeData = convertReferenceDataToTreeData(result);
82
- })
83
- .catch(() => {
84
- /* To do*/
85
- });
86
- }
87
- /* is referenced by*/
88
- if (to) {
89
- this.loadReferencesCallback(id, true)
90
- .then(result => {
91
- this.referencesToTreeData = convertReferenceDataToTreeData(result);
92
- })
93
- .catch(() => {
94
- /* To do*/
95
- });
96
- }
87
+ this.loadReferencesCallback(id, to).then(result => {
88
+ if (to) {
89
+ this.referencesToTreeData =
90
+ convertReferenceDataToTreeViewData(result);
91
+ }
92
+ else {
93
+ this.referencedByTreeData =
94
+ convertReferenceDataToTreeViewData(result);
95
+ }
96
+ });
97
97
  }
98
98
  };
99
99
  /**
@@ -102,71 +102,27 @@ export class GxIdeReferences {
102
102
  this.hideBarButtonClickedHandler = () => {
103
103
  this.barHidden = !this.barHidden;
104
104
  };
105
- /**
106
- * Simple helper function to get 'this.referencedByTreeData' or 'this.referencesToTreeData'
107
- */
108
- this.getRef = (to = false) => {
109
- if (!to) {
110
- /* referenced by*/
111
- return this.referencedByTreeData;
112
- }
113
- else {
114
- /* references to*/
115
- return this.referencesToTreeData;
116
- }
117
- };
118
- /**
119
- * Simple helper function to update 'this.referencedByTreeData' or 'this.referencesToTreeData'
120
- */
121
- this.updateRef = (to = false, updatedData) => {
122
- if (!to) {
123
- /* referenced by*/
124
- this.referencedByTreeData = updatedData;
125
- }
126
- else {
127
- /* references to*/
128
- this.referencesToTreeData = updatedData;
105
+ this.referencesLazyLoadCallbackHandler = (ref) => async (treeItemId) => {
106
+ if (this.loadReferencesCallback) {
107
+ const to = ref === "references-to";
108
+ const referencesLazyChildren = await this.loadReferencesCallback(treeItemId, to);
109
+ const treeLazyChildren = convertReferenceDataToTreeViewData(referencesLazyChildren);
110
+ return new Promise(resolve => {
111
+ resolve(treeLazyChildren);
112
+ });
129
113
  }
114
+ return new Promise(resolve => {
115
+ resolve([]);
116
+ });
130
117
  };
131
- /**
132
- * Handles changes on any of the references (by or to). Used to:
133
- * 1) Keep the models updated.
134
- * 2) call the openObjectCallback.
135
- * 3) call the loadReferencesCallback if a lazy node was toggled.
136
- */
137
- this.referencesPanelStateChangedHandler = (to = false) => (e) => {
138
- const event = e.detail.emittedBy;
139
- const nodeData = e.detail.itemData;
140
- const nodeId = e.detail.itemData.id;
141
- const nodeLabel = e.detail.itemData.label;
142
- /* tree item was selected*/
143
- if (event === "selectionChanged") {
144
- this.selectReferenceCallback(nodeId);
145
- /* Returns void Promise*/
146
- }
147
- /* tree item was double-clicked.*/
148
- if (event === "doubleClicked") {
149
- this.openObjectCallback(nodeId);
150
- }
151
- let updatedTreeModel = [];
152
- const lazy = nodeData.lazy;
153
- if (lazy) {
154
- // loadReferencesCallback
155
- let children = [];
156
- this.loadReferencesCallback(nodeId, to)
157
- .then(result => {
158
- children = convertReferenceDataToTreeData(result);
159
- // Then update model
160
- updatedTreeModel = updateTreeModel(this.getRef(to), { id: nodeId, label: nodeLabel, items: children }, nodeId);
161
- this.updateRef(to, updatedTreeModel);
162
- })
163
- .catch(() => {
164
- /* To do*/
118
+ this.referenceSelectedHandler = (selectedItem) => {
119
+ if (this.selectReferenceCallback) {
120
+ const selectedItems = [];
121
+ selectedItem.detail.forEach(item => {
122
+ selectedItems.push(item.id);
165
123
  });
166
- }
167
- else {
168
- updatedTreeModel = updateTreeModel(this.getRef(to), nodeData, nodeId);
169
- this.updateRef(to, updatedTreeModel);
124
+ this.selectReferenceCallback(selectedItems[0]);
125
+ // returns void
170
126
  }
171
127
  };
172
128
  this.referencedByTreeData = undefined;
@@ -196,22 +152,28 @@ export class GxIdeReferences {
196
152
  this.evaluateInitialReferenceData();
197
153
  }
198
154
  componentDidLoad() {
199
- this.attachSelectObjectListener();
155
+ this.attachTreeEvents();
200
156
  }
201
157
  componentDidRender() {
202
158
  this.componentDidRenderEvent.emit(this._componentLocale.componentName);
203
159
  }
204
160
  // 10.RENDER() FUNCTION //
205
161
  render() {
206
- var _a, _b, _c, _d, _e, _f;
207
- return (h(Host, { class: "gx-ide-component" }, h("div", { class: "gx-ide-main-wrapper" }, h("gx-ide-container", { displayBorderBottom: true }, h("header", { class: "header" }, h("div", { class: "header__top grid" }, h("gxg-button", { icon: "navigation/arrow-down", type: "secondary-icon-only", class: "hide-bar-button", onClick: this.hideBarButtonClickedHandler, part: "toggle-bar-button" }), h("gxg-label", { labelPosition: "start", class: "suggest-label", part: "select-object-label" }, this._componentLocale.header.selectObject), h("gxg-suggest", null, h("ch-suggest", { value: this.selectedObject.name, onValueChanged: this.selectObjectValueChangedHandler, ref: el => (this.selectObjectSuggestEl = el), part: "object-selector-suggest", exportparts: "dropdown:select-object-dropdown" }, renderSuggestLists(this.objectsSuggestions))), h("gxg-button", { type: "secondary-icon-only", icon: "gemini-tools/show-more-horizontal", onClick: this.openSelectorDialogCallbackHandler, class: "selector-dialog-button", part: "open-selector-dialog-button" })), h("div", { class: {
162
+ var _a, _b, _c, _d, _e, _f, _g, _h;
163
+ return (h(Host, { class: "gx-ide-component" }, h("div", { class: "gx-ide-main-wrapper" }, h("gx-ide-container", { displayBorderBottom: true }, h("header", { class: "header" }, h("div", { class: "header__top grid" }, h("gxg-button", { icon: "navigation/arrow-down", type: "secondary-icon-only", class: "hide-bar-button", onClick: this.hideBarButtonClickedHandler, part: "toggle-bar-button" }), h("gxg-label", { labelPosition: "start", class: "suggest-label", part: "select-object-label" }, this._componentLocale.header.selectObject), h("gxg-suggest", null, h("ch-suggest", { value: this.selectedObject.name, onValueChanged: this.selectObjectValueChangedHandler, onSelectionChanged: this.selectObjectSelectionChanged, part: "object-selector-suggest", exportparts: "dropdown:select-object-dropdown" }, renderSuggestLists(this.objectsSuggestions))), h("gxg-button", { type: "secondary-icon-only", icon: "gemini-tools/show-more-horizontal", onClick: this.openSelectorDialogCallbackHandler, class: "selector-dialog-button", part: "open-selector-dialog-button" })), h("div", { class: {
208
164
  "header__bottom": true,
209
165
  "header__bottom--hidden": this.barHidden
210
- } }, h("div", { class: "outer-wrapper" }, h("div", { class: "inner-wrapper" }, h("div", { class: "inner-wrapper__left" }, h("gxg-icon", { type: this.selectedObject.icon, color: "auto" }), h("gxg-text", { padding: "s", type: "text-link", part: "open-object-text-link", onClick: this.openObjectCallbackHandler }, `${this.selectedObject.name} : ${this.selectedObject.description}`)), h("div", { class: "inner-wrapper__right gxi-hidden" }, h("gxg-form-checkbox", { id: "references-by-type", label: "Group references by type", required: true, "display-validation-styles": true, part: "references-type-checkbox" }))))))), h("main", { class: "main grid gxi-full-height gxi-overflow-auto" }, h("gx-ide-container", { containerTitle: this._componentLocale.main.isReferencedBy, fullHeight: true, noContentPadding: true, class: "gxi-overflow-auto", part: "referenced-by-container" }, h("gxg-tree", { class: { "gxi-hidden": !((_a = this.referencedByTreeData) === null || _a === void 0 ? void 0 : _a.length) }, checkbox: false, onTreeItemStateChanged: this.referencesPanelStateChangedHandler(false), part: "referenced-by-tree" }, renderTreeItems(this.referencedByTreeData)), !((_b = this.referencedByTreeData) === null || _b === void 0 ? void 0 : _b.length) && (h("gxg-text", { textAlign: "center", padding: "m", type: "text-regular", maxWidth: this.referencesMessagesMaxWidth, part: "referenced-by-text" }, ((_c = this.referencedByTreeData) === null || _c === void 0 ? void 0 : _c.length) === 0
166
+ } }, h("div", { class: "outer-wrapper" }, h("div", { class: "inner-wrapper" }, h("div", { class: "inner-wrapper__left" }, h("gxg-icon", { type: this.selectedObject.icon, color: "auto" }), h("gxg-text", { padding: "s", type: "text-link", part: "open-object-text-link", onClick: this.openObjectCallbackHandler }, `${this.selectedObject.name} : ${this.selectedObject.description}`)), h("div", { class: "inner-wrapper__right gxi-hidden" }, h("gxg-form-checkbox", { id: "references-by-type", label: "Group references by type", required: true, "display-validation-styles": true, part: "references-type-checkbox" }))))))), h("main", { class: "main grid gxi-full-height gxi-overflow-auto" }, h("gx-ide-container", { containerTitle: this._componentLocale.main.isReferencedBy, fullHeight: true, class: "gxi-overflow-auto", part: "referenced-by-container" }, h("div", { class: {
167
+ "reference-container": true,
168
+ "reference-container--no-references": !((_a = this.referencedByTreeData) === null || _a === void 0 ? void 0 : _a.length)
169
+ } }, h("gxg-tree-view", { class: { "gxi-hidden": !((_b = this.referencedByTreeData) === null || _b === void 0 ? void 0 : _b.length) }, part: "referenced-by-tree", treeModel: this.referencedByTreeData, lazyLoadTreeItemsCallback: this.referencesLazyLoadCallbackHandler("referenced-by"), onSelectedItemsChange: this.referenceSelectedHandler, dragDisabled: true, dropDisabled: true }), !((_c = this.referencedByTreeData) === null || _c === void 0 ? void 0 : _c.length) && (h("gxg-text", { textAlign: "center", padding: "m", type: "text-regular", maxWidth: this.referencesMessagesMaxWidth, part: "referenced-by-text" }, ((_d = this.referencedByTreeData) === null || _d === void 0 ? void 0 : _d.length) === 0
211
170
  ? this._componentLocale.main.isReferencedByEmpty
212
- : this._componentLocale.main.isReferencedByError))), h("gx-ide-container", { containerTitle: this._componentLocale.main.hasReferencesTo, fullHeight: true, noContentPadding: true, class: "gxi-overflow-auto", part: "references-to-container" }, h("gxg-tree", { class: { "gxi-hidden": !((_d = this.referencesToTreeData) === null || _d === void 0 ? void 0 : _d.length) }, checkbox: false, onTreeItemStateChanged: this.referencesPanelStateChangedHandler(true), part: "references-to-tree" }, renderTreeItems(this.referencesToTreeData)), !((_e = this.referencesToTreeData) === null || _e === void 0 ? void 0 : _e.length) && (h("gxg-text", { textAlign: "center", padding: "m", type: "text-regular", maxWidth: this.referencesMessagesMaxWidth, part: "references-to-text" }, ((_f = this.referencesToTreeData) === null || _f === void 0 ? void 0 : _f.length) === 0
171
+ : this._componentLocale.main.isReferencedByError)))), h("gx-ide-container", { containerTitle: this._componentLocale.main.hasReferencesTo, fullHeight: true, class: "gxi-overflow-auto", part: "references-to-container" }, h("div", { class: {
172
+ "reference-container": true,
173
+ "reference-container--no-references": !((_e = this.referencesToTreeData) === null || _e === void 0 ? void 0 : _e.length)
174
+ } }, h("gxg-tree-view", { class: { "gxi-hidden": !((_f = this.referencesToTreeData) === null || _f === void 0 ? void 0 : _f.length) }, part: "referenced-to-tree", treeModel: this.referencesToTreeData, lazyLoadTreeItemsCallback: this.referencesLazyLoadCallbackHandler("references-to"), onSelectedItemsChange: this.referenceSelectedHandler }), !((_g = this.referencesToTreeData) === null || _g === void 0 ? void 0 : _g.length) && (h("gxg-text", { textAlign: "center", padding: "m", type: "text-regular", maxWidth: this.referencesMessagesMaxWidth, part: "references-to-text" }, ((_h = this.referencesToTreeData) === null || _h === void 0 ? void 0 : _h.length) === 0
213
175
  ? this._componentLocale.main.hasReferencesEmpty
214
- : this._componentLocale.main.hasReferencesToError)))))));
176
+ : this._componentLocale.main.hasReferencesToError))))))));
215
177
  }
216
178
  static get is() { return "gx-ide-references"; }
217
179
  static get encapsulation() { return "shadow"; }
@@ -199,7 +199,7 @@ const ChSuggest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
199
199
  windowClosedHandler() {
200
200
  this.textInput.focus();
201
201
  this.windowHidden = true;
202
- this.el.innerHTML = "";
202
+ this.slot.innerHTML = "";
203
203
  }
204
204
  // 9.PUBLIC METHODS API //
205
205
  /**
@@ -211,7 +211,7 @@ const ChSuggest = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
211
211
  }
212
212
  // 10.RENDER() FUNCTION //
213
213
  render() {
214
- 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 })))));
214
+ 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) })))));
215
215
  }
216
216
  static get delegatesFocus() { return true; }
217
217
  get el() { return this; }
@@ -0,0 +1,119 @@
1
+ import { h, proxyCustomElement, HTMLElement, Host } from '@stencil/core/internal/client';
2
+ import { d as defineCustomElement$4 } from './ch-suggest2.js';
3
+ import { d as defineCustomElement$3 } from './ch-window2.js';
4
+ import { d as defineCustomElement$2 } from './ch-window-close2.js';
5
+
6
+ /**
7
+ * @description This function converts SelectorCategoryData[] SuggestData
8
+ */
9
+ const convertObjectDataToSuggestData = (selectorCategoriesData) => {
10
+ const suggestData = {
11
+ suggestItems: null,
12
+ suggestLists: []
13
+ };
14
+ if (selectorCategoriesData.length) {
15
+ selectorCategoriesData.forEach(selectorCategory => {
16
+ const suggestList = {
17
+ label: selectorCategory.name,
18
+ items: []
19
+ };
20
+ selectorCategory.items.forEach((objectData) => {
21
+ const suggestItem = {
22
+ value: objectData.id,
23
+ description: objectData.description,
24
+ icon: objectData.icon
25
+ };
26
+ suggestList.items.push(suggestItem);
27
+ });
28
+ suggestData.suggestLists.push(suggestList);
29
+ });
30
+ }
31
+ return suggestData;
32
+ };
33
+
34
+ /* eslint-disable @typescript-eslint/no-use-before-define */
35
+ const renderSuggestLists = (suggestData) => {
36
+ if (suggestData === null || suggestData === void 0 ? void 0 : suggestData.suggestLists.length) {
37
+ const randomNumber = Math.random();
38
+ const result = suggestData.suggestLists.map((list) => {
39
+ return (h("ch-suggest-list", { label: list.label, key: randomNumber }, list.items.map((item) => {
40
+ return renderSuggestListsItem(item);
41
+ })));
42
+ });
43
+ return result;
44
+ }
45
+ return null;
46
+ };
47
+ const renderSuggestListsItem = (suggestItem) => {
48
+ return (h("ch-suggest-list-item", { value: suggestItem.value }, [suggestItem.description || suggestItem.value]));
49
+ };
50
+
51
+ 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}";
52
+
53
+ const ChTestSuggest$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
54
+ constructor() {
55
+ super();
56
+ this.__registerHost();
57
+ this.__attachShadow();
58
+ // 5.EVENTS (EMIT) //
59
+ // 6.COMPONENT LIFECYCLE EVENTS //
60
+ // 7.LISTENERS //
61
+ // 8.PUBLIC METHODS API //
62
+ // 9.LOCAL METHODS //
63
+ /**
64
+ * This handler gets fired every time the value of the 'Select Object' ch-suggest changes.
65
+ */
66
+ this.selectObjectValueChangedHandler = async (e) => {
67
+ const value = e.detail;
68
+ this.selectorSourceCallback(value)
69
+ .then(result => {
70
+ /* show suggestions*/
71
+ this.objectsSuggestions = convertObjectDataToSuggestData(result);
72
+ })
73
+ .catch(() => {
74
+ // to do
75
+ });
76
+ };
77
+ }
78
+ // 10.RENDER() FUNCTION //
79
+ render() {
80
+ return (h(Host, null, h("ch-suggest", { onValueChanged: this.selectObjectValueChangedHandler, part: "object-selector-suggest", exportparts: "dropdown:select-object-dropdown" }, renderSuggestLists(this.objectsSuggestions))));
81
+ }
82
+ static get style() { return testSuggestCss; }
83
+ }, [1, "ch-test-suggest", {
84
+ "selectorSourceCallback": [16],
85
+ "objectsSuggestions": [32]
86
+ }]);
87
+ function defineCustomElement$1() {
88
+ if (typeof customElements === "undefined") {
89
+ return;
90
+ }
91
+ const components = ["ch-test-suggest", "ch-suggest", "ch-window", "ch-window-close"];
92
+ components.forEach(tagName => { switch (tagName) {
93
+ case "ch-test-suggest":
94
+ if (!customElements.get(tagName)) {
95
+ customElements.define(tagName, ChTestSuggest$1);
96
+ }
97
+ break;
98
+ case "ch-suggest":
99
+ if (!customElements.get(tagName)) {
100
+ defineCustomElement$4();
101
+ }
102
+ break;
103
+ case "ch-window":
104
+ if (!customElements.get(tagName)) {
105
+ defineCustomElement$3();
106
+ }
107
+ break;
108
+ case "ch-window-close":
109
+ if (!customElements.get(tagName)) {
110
+ defineCustomElement$2();
111
+ }
112
+ break;
113
+ } });
114
+ }
115
+
116
+ const ChTestSuggest = ChTestSuggest$1;
117
+ const defineCustomElement = defineCustomElement$1;
118
+
119
+ export { ChTestSuggest, defineCustomElement };
@@ -1,7 +1,6 @@
1
- import { proxyCustomElement, HTMLElement, h, forceUpdate, Host } from '@stencil/core/internal/client';
2
- import { d as defineCustomElement$5 } from './checkbox.js';
3
- import { d as defineCustomElement$4 } from './tree-x.js';
4
- import { d as defineCustomElement$3 } from './tree-x-list.js';
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, forceUpdate } from '@stencil/core/internal/client';
2
+ import { d as defineCustomElement$4 } from './checkbox.js';
3
+ import { d as defineCustomElement$3 } from './tree-x.js';
5
4
  import { d as defineCustomElement$2 } from './tree-x-list-item.js';
6
5
 
7
6
  const testTreeXCss = "ch-test-tree-x{display:contents}";
@@ -9,18 +8,22 @@ const testTreeXCss = "ch-test-tree-x{display:contents}";
9
8
  const DEFAULT_DRAG_DISABLED_VALUE = false;
10
9
  const DEFAULT_DROP_DISABLED_VALUE = false;
11
10
  const DEFAULT_CLASS_VALUE = "tree-view-item";
11
+ const DEFAULT_EDITABLE_ITEMS_VALUE = true;
12
12
  const DEFAULT_EXPANDED_VALUE = false;
13
13
  const DEFAULT_INDETERMINATE_VALUE = false;
14
14
  const DEFAULT_LAZY_VALUE = false;
15
+ const DEFAULT_ORDER_VALUE = 0;
15
16
  const DEFAULT_SELECTED_VALUE = false;
16
17
  const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
17
18
  constructor() {
18
19
  super();
19
20
  this.__registerHost();
21
+ this.itemContextmenu = createEvent(this, "itemContextmenu", 7);
22
+ this.itemOpenReference = createEvent(this, "itemOpenReference", 7);
23
+ this.selectedItemsChange = createEvent(this, "selectedItemsChange", 7);
20
24
  // UI Models
21
25
  this.flattenedTreeModel = new Map();
22
26
  this.selectedItems = new Set();
23
- this.flattenedLazyTreeModel = new Map();
24
27
  /**
25
28
  * This property lets you specify if the tree is waiting to process the drop
26
29
  * of items.
@@ -28,12 +31,12 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
28
31
  this.waitDropProcessing = false;
29
32
  /**
30
33
  * This attribute lets you specify if the drag operation is disabled in all
31
- * items by default. If `true`, the control can't be dragged.
34
+ * items by default. If `true`, the items can't be dragged.
32
35
  */
33
36
  this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;
34
37
  /**
35
38
  * This attribute lets you specify if the drop operation is disabled in all
36
- * items by default. If `true`, the control won't accept any drops.
39
+ * items by default. If `true`, the items won't accept any drops.
37
40
  */
38
41
  this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;
39
42
  /**
@@ -44,6 +47,11 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
44
47
  * Set this attribute if you want to allow multi selection of the items.
45
48
  */
46
49
  this.multiSelection = false;
50
+ /**
51
+ * This attribute lets you specify if the edit operation is enabled in all
52
+ * items by default. If `true`, the items can edit its caption in place.
53
+ */
54
+ this.editableItems = DEFAULT_EDITABLE_ITEMS_VALUE;
47
55
  /**
48
56
  * `true` to display the relation between tree items and tree lists using
49
57
  * lines.
@@ -63,6 +71,7 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
63
71
  });
64
72
  };
65
73
  this.handleSelectedItemsChange = (event) => {
74
+ event.stopPropagation();
66
75
  const itemsToProcess = new Map(event.detail);
67
76
  // Remove no longer selected items
68
77
  this.selectedItems.forEach(selectedItemId => {
@@ -86,12 +95,17 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
86
95
  newSelectedItem.expanded = newSelectedItemInfo.expanded;
87
96
  this.selectedItems.add(itemId);
88
97
  });
98
+ this.selectedItemsChange.emit(event.detail);
89
99
  };
90
100
  this.handleExpandedItemChange = (event) => {
91
101
  const detail = event.detail;
92
102
  const itemInfo = this.flattenedTreeModel.get(detail.id).item;
93
103
  itemInfo.expanded = detail.expanded;
94
104
  };
105
+ this.handleItemContextmenu = (event) => {
106
+ event.stopPropagation();
107
+ this.itemContextmenu.emit(event.detail);
108
+ };
95
109
  this.handleItemsDropped = (event) => {
96
110
  if (!this.dropItemsCallback) {
97
111
  return;
@@ -156,13 +170,13 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
156
170
  itemUIModelExtended.parentItem = newParentUIModel;
157
171
  };
158
172
  this.renderSubModel = (treeSubModel, lastItem, level) => {
159
- var _a, _b;
160
- 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 &&
173
+ var _a, _b, _c;
174
+ 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 &&
161
175
  treeSubModel.items != null &&
162
- treeSubModel.items.length !== 0 && (h("ch-tree-x-list", { slot: "tree" }, treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))))));
176
+ treeSubModel.items.map((subModel, index) => this.renderSubModel(subModel, this.showLines && index === treeSubModel.items.length - 1, level + 1))));
163
177
  };
164
178
  this.flattenItemUIModel = (parentModel) => (item) => {
165
- var _a, _b, _c, _d;
179
+ var _a, _b, _c, _d, _e;
166
180
  this.flattenedTreeModel.set(item.id, {
167
181
  parentItem: parentModel,
168
182
  item: item
@@ -173,10 +187,8 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
173
187
  (_a = item.expanded) !== null && _a !== void 0 ? _a : (item.expanded = DEFAULT_EXPANDED_VALUE);
174
188
  (_b = item.indeterminate) !== null && _b !== void 0 ? _b : (item.indeterminate = DEFAULT_INDETERMINATE_VALUE);
175
189
  (_c = item.lazy) !== null && _c !== void 0 ? _c : (item.lazy = DEFAULT_LAZY_VALUE);
176
- (_d = item.selected) !== null && _d !== void 0 ? _d : (item.selected = DEFAULT_SELECTED_VALUE);
177
- if (item.lazy) {
178
- this.flattenedLazyTreeModel.set(item.id, item);
179
- }
190
+ (_d = item.order) !== null && _d !== void 0 ? _d : (item.order = DEFAULT_ORDER_VALUE);
191
+ (_e = item.selected) !== null && _e !== void 0 ? _e : (item.selected = DEFAULT_SELECTED_VALUE);
180
192
  if (item.selected) {
181
193
  this.selectedItems.add(item.id);
182
194
  }
@@ -191,9 +203,8 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
191
203
  * lazy state, updates the item's UI Model.
192
204
  */
193
205
  async loadLazyContent(itemId, items, downloading = false, lazy = false) {
194
- const itemToLazyLoadContent = this.flattenedLazyTreeModel.get(itemId);
206
+ const itemToLazyLoadContent = this.flattenedTreeModel.get(itemId).item;
195
207
  // Establish that the content was lazy loaded
196
- this.flattenedLazyTreeModel.delete(itemId);
197
208
  itemToLazyLoadContent.downloading = downloading;
198
209
  itemToLazyLoadContent.lazy = lazy;
199
210
  // Check if there is items to add
@@ -344,11 +355,15 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
344
355
  }
345
356
  });
346
357
  }
358
+ handleOpenReference(event) {
359
+ event.stopPropagation();
360
+ this.itemOpenReference.emit(event.detail);
361
+ }
347
362
  flattenSubModel(model) {
348
363
  const items = model.items;
349
364
  if (!items) {
350
365
  // Make sure that subtrees don't have an undefined array
351
- if (model.leaf === false) {
366
+ if (model.leaf !== true) {
352
367
  model.items = [];
353
368
  }
354
369
  return;
@@ -364,14 +379,13 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
364
379
  }
365
380
  flattenModel() {
366
381
  this.flattenedTreeModel.clear();
367
- this.flattenedLazyTreeModel.clear();
368
382
  this.flattenSubModel({ id: null, caption: null, items: this.treeModel });
369
383
  }
370
384
  componentWillLoad() {
371
385
  this.flattenModel();
372
386
  }
373
387
  render() {
374
- return (h(Host, null, h("ch-tree-x", { class: this.cssClass || null, multiSelection: this.multiSelection, waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.handleDroppableZoneEnter, onExpandedItemChange: this.handleExpandedItemChange, 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)))));
388
+ 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))));
375
389
  }
376
390
  static get watchers() { return {
377
391
  "treeModel": ["handleTreeModelChange"]
@@ -387,6 +401,7 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
387
401
  "lazyLoadTreeItemsCallback": [16],
388
402
  "modifyItemCaptionCallback": [16],
389
403
  "multiSelection": [4, "multi-selection"],
404
+ "editableItems": [4, "editable-items"],
390
405
  "showLines": [1, "show-lines"],
391
406
  "sortItemsCallback": [16],
392
407
  "waitDropProcessing": [32],
@@ -396,12 +411,12 @@ const ChTestTreeX$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
396
411
  "updateAllItemsProperties": [64],
397
412
  "updateItemsProperties": [64],
398
413
  "updateValidDropZone": [64]
399
- }, [[0, "loadLazyContent", "loadLazyChildrenHandler"], [0, "modifyCaption", "handleCaptionModification"]]]);
414
+ }, [[0, "loadLazyContent", "loadLazyChildrenHandler"], [0, "modifyCaption", "handleCaptionModification"], [2, "openReference", "handleOpenReference"]]]);
400
415
  function defineCustomElement$1() {
401
416
  if (typeof customElements === "undefined") {
402
417
  return;
403
418
  }
404
- const components = ["ch-test-tree-x", "ch-checkbox", "ch-tree-x", "ch-tree-x-list", "ch-tree-x-list-item"];
419
+ const components = ["ch-test-tree-x", "ch-checkbox", "ch-tree-x", "ch-tree-x-list-item"];
405
420
  components.forEach(tagName => { switch (tagName) {
406
421
  case "ch-test-tree-x":
407
422
  if (!customElements.get(tagName)) {
@@ -409,16 +424,11 @@ function defineCustomElement$1() {
409
424
  }
410
425
  break;
411
426
  case "ch-checkbox":
412
- if (!customElements.get(tagName)) {
413
- defineCustomElement$5();
414
- }
415
- break;
416
- case "ch-tree-x":
417
427
  if (!customElements.get(tagName)) {
418
428
  defineCustomElement$4();
419
429
  }
420
430
  break;
421
- case "ch-tree-x-list":
431
+ case "ch-tree-x":
422
432
  if (!customElements.get(tagName)) {
423
433
  defineCustomElement$3();
424
434
  }