@genexus/genexus-ide-ui 0.0.17 → 0.0.18

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 (46) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-references.cjs.entry.js +115 -90
  3. package/dist/cjs/gx-ide-test.cjs.entry.js +40 -3
  4. package/dist/cjs/{gxg-form-radio-group.cjs.entry.js → gx-ide-top-bar_2.cjs.entry.js} +31 -0
  5. package/dist/cjs/gxg-tree_2.cjs.entry.js +40 -59
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/update-tree-model-445c63a8.js +53 -0
  8. package/dist/collection/common/render-tree.js +1 -1
  9. package/dist/collection/common/update-tree-model.js +22 -0
  10. package/dist/collection/components/_test/test.js +129 -2
  11. package/dist/collection/components/references/references.js +119 -113
  12. package/dist/collection/pages/assets/common.js +105 -95
  13. package/dist/components/gx-ide-references.js +131 -111
  14. package/dist/components/gx-ide-test.js +45 -4
  15. package/dist/components/gxg-tree-item2.js +21 -46
  16. package/dist/components/gxg-tree2.js +20 -14
  17. package/dist/components/update-tree-model.js +50 -0
  18. package/dist/esm/genexus-ide-ui.js +1 -1
  19. package/dist/esm/gx-ide-references.entry.js +115 -90
  20. package/dist/esm/gx-ide-test.entry.js +40 -3
  21. package/dist/esm/{gxg-form-radio-group.entry.js → gx-ide-top-bar_2.entry.js} +32 -2
  22. package/dist/esm/gxg-tree_2.entry.js +40 -59
  23. package/dist/esm/loader.js +1 -1
  24. package/dist/esm/update-tree-model-80419058.js +50 -0
  25. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  26. package/dist/genexus-ide-ui/p-254f9ce7.entry.js +1 -0
  27. package/dist/genexus-ide-ui/p-67cf60f5.js +1 -0
  28. package/dist/genexus-ide-ui/p-7007965c.entry.js +1 -0
  29. package/dist/genexus-ide-ui/p-78a90113.entry.js +1 -0
  30. package/dist/genexus-ide-ui/p-b66a4121.entry.js +1 -0
  31. package/dist/types/common/update-tree-model.d.ts +2 -0
  32. package/dist/types/components/_test/test.d.ts +19 -1
  33. package/dist/types/components/references/references.d.ts +28 -24
  34. package/dist/types/components.d.ts +37 -9
  35. package/package.json +3 -3
  36. package/dist/cjs/gx-ide-top-bar.cjs.entry.js +0 -37
  37. package/dist/cjs/render-tree-25d5b8a1.js +0 -29
  38. package/dist/components/render-tree.js +0 -27
  39. package/dist/esm/gx-ide-top-bar.entry.js +0 -33
  40. package/dist/esm/render-tree-fc8636a3.js +0 -27
  41. package/dist/genexus-ide-ui/p-48482e25.entry.js +0 -1
  42. package/dist/genexus-ide-ui/p-a5fee36d.entry.js +0 -1
  43. package/dist/genexus-ide-ui/p-abee8c7b.js +0 -1
  44. package/dist/genexus-ide-ui/p-be9406e7.entry.js +0 -1
  45. package/dist/genexus-ide-ui/p-c5c6e102.entry.js +0 -1
  46. package/dist/genexus-ide-ui/p-f6536bbc.entry.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-4f0a5746.js';
2
2
  import { L as Locale } from './locale-e183487a.js';
3
- import { r as renderTreeItems } from './render-tree-fc8636a3.js';
3
+ import { u as updateTreeModel, r as renderTreeItems } from './update-tree-model-80419058.js';
4
4
 
5
5
  /* eslint-disable @typescript-eslint/no-use-before-define */
6
6
  const renderSuggestLists = (suggestData) => {
@@ -115,7 +115,7 @@ const GxIdeReferences = class {
115
115
  // 8.PUBLIC METHODS API //
116
116
  // 9.LOCAL METHODS //
117
117
  /**
118
- * @description It attaches on the ch-suggest, the "itemSelected" event triggered by the ch-suggest-list-item. This helps set the new 'selectedObject'.
118
+ * It attaches on the ch-suggest, the "itemSelected" event triggered by the ch-suggest-list-item. This helps set the new 'selectedObject'.
119
119
  */
120
120
  this.attachSelectObjectListener = () => {
121
121
  this.selectObjectSuggestEl.addEventListener("itemSelected", (e) => {
@@ -126,61 +126,7 @@ const GxIdeReferences = class {
126
126
  });
127
127
  };
128
128
  /**
129
- * @description It attaches several events on the 'referencedByEl' element, which is a tree.
130
- */
131
- this.attachReferencedByListeners = () => {
132
- /* 'toggleIconClicked' Event: This events gets fired when the user clicks on the toggle icon, that opens/close a tree. Here we only use it to check if the item has lazy items to be loaded. */
133
- this.referencedByEl.addEventListener("toggleIconClicked", async (e) => {
134
- if (e.detail.lazy && e.detail.id) {
135
- this.loadReferencesCallback(e.detail.id, false)
136
- .then(result => {
137
- this.referencedBy = result;
138
- })
139
- .catch(() => {
140
- // to do
141
- });
142
- }
143
- });
144
- /* 'selectionChanged' Event: Fired when a new tree item was selected.*/
145
- this.referencedByEl.addEventListener("selectionChanged", (e) => {
146
- this.selectReferenceCallback(e.detail.id);
147
- /* Returns void Promise*/
148
- });
149
- /* 'doubleClicked' Event: Fired when a tree item was double-clicked.*/
150
- this.referencedByEl.addEventListener("doubleClicked", (e) => {
151
- this.openObjectCallback(e.detail.id);
152
- /* Returns void Promise*/
153
- });
154
- };
155
- /**
156
- * @description It attaches several events on the 'referencesToEl' element, which is a tree.
157
- */
158
- this.attachReferencesToListeners = () => {
159
- /* 'toggleIconClicked' Event: (Read description on 'attachReferencedByListeners' as it does the same)*/
160
- this.referencesToEl.addEventListener("toggleIconClicked", async (e) => {
161
- if (e.detail.lazy && e.detail.id) {
162
- this.loadReferencesCallback(e.detail.id, true)
163
- .then(result => {
164
- this.referencesTo = result;
165
- })
166
- .catch(() => {
167
- // to do
168
- });
169
- }
170
- });
171
- /* 'selectionChanged' Event: Fired when a new tree item was selected.*/
172
- this.referencesToEl.addEventListener("selectionChanged", (e) => {
173
- this.selectReferenceCallback(e.detail.id);
174
- /* Returns void Promise*/
175
- });
176
- /* 'doubleClicked' Event: Fired when a tree item was double-clicked.*/
177
- this.referencesToEl.addEventListener("doubleClicked", (e) => {
178
- this.openObjectCallback(e.detail.id);
179
- /* Returns void Promise*/
180
- });
181
- };
182
- /**
183
- * @description This handler gets fired every time the value of the 'Select Object' ch-suggest changes. Then, it calls the 'updateSuggestedObjects' method, that keeps the state of the last suggested objects that were passed bu the host. Also, it shows the suggested objects on the ch-suggest box.
129
+ * This handler gets fired every time the value of the 'Select Object' ch-suggest changes. Then, it calls the 'updateSuggestedObjects' method, that keeps the state of the last suggested objects that were passed bu the host. Also, it shows the suggested objects on the ch-suggest box.
184
130
  */
185
131
  this.selectObjectValueChangedHandler = async (e) => {
186
132
  const value = e.detail;
@@ -200,55 +146,131 @@ const GxIdeReferences = class {
200
146
  /* Returns an empty Promise*/
201
147
  };
202
148
  /**
203
- * @description handler that gets fired when the use clicks on the ch-suggest button (...)
149
+ * handler that gets fired when the use clicks on the ch-suggest button (...)
204
150
  */
205
151
  this.openSelectorDialogCallbackHandler = async () => {
206
- this.selectedObject = await this.openSelectorDialogCallback();
152
+ this.openSelectorDialogCallback()
153
+ .then(result => {
154
+ this.selectedObject = result;
155
+ })
156
+ .catch(() => {
157
+ /* to do */
158
+ });
207
159
  };
208
160
  /**
209
- * @description It evaluates if loadReferencesCallback should be called, depending wether there is or not an actual selected object.
161
+ * It evaluates if loadReferencesCallback should be called, depending wether there is or not an actual selected object.
210
162
  */
211
163
  this.evaluateInitialReferenceData = () => {
212
- var _a;
213
- const selectedObjectId = (_a = this.selectedObject) === null || _a === void 0 ? void 0 : _a.id;
214
- selectedObjectId && this.loadReferencesHandler(selectedObjectId);
164
+ if (this.selectedObject) {
165
+ this.selectedObjectHandler(this.selectedObject);
166
+ }
215
167
  };
216
168
  /**
217
- * @description This method invokes 'loadReferencesCallback' callback for 'Is Referenced By' and 'Has References To' panels.
169
+ * This method invokes 'loadReferencesCallback' callback for 'Is Referenced By' and 'Has References To' panels. The second parameter "to" indicates if loadReferencesCallback callback should be called for "has references to" or "is references by"
218
170
  */
219
- this.loadReferencesHandler = async (id) => {
220
- /* Referenced By*/
171
+ this.loadReferencesHandler = async (id, to = false) => {
221
172
  if (this.loadReferencesCallback) {
222
- this.loadReferencesCallback(id, false)
223
- .then(result => {
224
- this.referencedBy = result;
225
- })
226
- .catch(() => {
227
- /* To do*/
228
- });
173
+ /* is referenced by*/
174
+ if (!to) {
175
+ this.loadReferencesCallback(id, false)
176
+ .then(result => {
177
+ this.referencedByTreeData = convertReferenceDataToTreeData(result);
178
+ })
179
+ .catch(() => {
180
+ /* To do*/
181
+ });
182
+ }
183
+ /* is referenced by*/
184
+ if (to) {
185
+ this.loadReferencesCallback(id, true)
186
+ .then(result => {
187
+ this.referencesToTreeData = convertReferenceDataToTreeData(result);
188
+ })
189
+ .catch(() => {
190
+ /* To do*/
191
+ });
192
+ }
229
193
  }
230
- /* References To*/
231
- if (this.loadReferencesCallback) {
232
- this.loadReferencesCallback(id, true)
194
+ };
195
+ /**
196
+ * It hides/show the bar (The header bottom section).
197
+ */
198
+ this.hideBarButtonClickedHandler = () => {
199
+ this.barHidden = !this.barHidden;
200
+ };
201
+ /**
202
+ * Simple helper function to get 'this.referencedByTreeData' or 'this.referencesToTreeData'
203
+ */
204
+ this.getRef = (to = false) => {
205
+ if (!to) {
206
+ /* referenced by*/
207
+ return this.referencedByTreeData;
208
+ }
209
+ else {
210
+ /* references to*/
211
+ return this.referencesToTreeData;
212
+ }
213
+ };
214
+ /**
215
+ * Simple helper function to update 'this.referencedByTreeData' or 'this.referencesToTreeData'
216
+ */
217
+ this.updateRef = (to = false, updatedData) => {
218
+ if (!to) {
219
+ /* referenced by*/
220
+ this.referencedByTreeData = updatedData;
221
+ }
222
+ else {
223
+ /* references to*/
224
+ this.referencesToTreeData = updatedData;
225
+ }
226
+ };
227
+ /**
228
+ * Handles changes on any of the references (by or to). Used to:
229
+ * 1) Keep the models updated.
230
+ * 2) call the openObjectCallback.
231
+ * 3) call the loadReferencesCallback if a lazy node was toggled.
232
+ */
233
+ this.referencesPanelStateChangedHandler = (to = false) => (e) => {
234
+ const event = e.detail.emittedBy;
235
+ const nodeData = e.detail.itemData;
236
+ const nodeId = e.detail.itemData.id;
237
+ const nodeLabel = e.detail.itemData.label;
238
+ /* tree item was selected*/
239
+ if (event === "selectionChanged") {
240
+ this.selectReferenceCallback(nodeId);
241
+ /* Returns void Promise*/
242
+ }
243
+ /* tree item was double-clicked.*/
244
+ if (event === "doubleClicked") {
245
+ this.openObjectCallback(nodeId);
246
+ }
247
+ let updatedTreeModel = [];
248
+ const lazy = nodeData.lazy;
249
+ if (lazy) {
250
+ // loadReferencesCallback
251
+ let children = [];
252
+ this.loadReferencesCallback(nodeId, to)
233
253
  .then(result => {
234
- this.referencesTo = result;
254
+ children = convertReferenceDataToTreeData(result);
255
+ // Then update model
256
+ updatedTreeModel = updateTreeModel(this.getRef(to), { id: nodeId, label: nodeLabel, items: children }, nodeId);
257
+ this.updateRef(to, updatedTreeModel);
235
258
  })
236
259
  .catch(() => {
237
260
  /* To do*/
238
261
  });
239
262
  }
263
+ else {
264
+ updatedTreeModel = updateTreeModel(this.getRef(to), nodeData, nodeId);
265
+ this.updateRef(to, updatedTreeModel);
266
+ }
240
267
  };
241
- /**
242
- * @description It hides/show the bar (The header bottom section).
243
- */
244
- this.hideBarButtonClickedHandler = () => {
245
- this.barHidden = !this.barHidden;
246
- };
268
+ this.referencedByTreeData = undefined;
269
+ this.referencesToTreeData = undefined;
247
270
  this.barHidden = false;
248
271
  this.objectsSuggestions = undefined;
249
272
  this.referencedBy = undefined;
250
273
  this.referencesTo = undefined;
251
- this.hideTopBar = false;
252
274
  this.selectedObject = undefined;
253
275
  this.selectorSourceCallback = undefined;
254
276
  this.loadReferencesCallback = undefined;
@@ -257,7 +279,12 @@ const GxIdeReferences = class {
257
279
  this.selectReferenceCallback = undefined;
258
280
  }
259
281
  selectedObjectHandler(newSelectedObject) {
260
- this.loadReferencesHandler(newSelectedObject.id);
282
+ if (newSelectedObject.id) {
283
+ /* update "is referenced by*/
284
+ this.loadReferencesHandler(newSelectedObject.id, false);
285
+ /* update "has references to*/
286
+ this.loadReferencesHandler(newSelectedObject.id, true);
287
+ }
261
288
  }
262
289
  // 6.COMPONENT LIFECYCLE EVENTS //
263
290
  async componentWillLoad() {
@@ -266,8 +293,6 @@ const GxIdeReferences = class {
266
293
  }
267
294
  componentDidLoad() {
268
295
  this.attachSelectObjectListener();
269
- this.attachReferencedByListeners();
270
- this.attachReferencesToListeners();
271
296
  }
272
297
  componentDidRender() {
273
298
  this.componentDidRenderEvent.emit(this._componentLocale.componentName);
@@ -275,12 +300,12 @@ const GxIdeReferences = class {
275
300
  // 10.RENDER() FUNCTION //
276
301
  render() {
277
302
  var _a, _b, _c, _d, _e, _f;
278
- return (h(Host, { class: "gx-ide-component" }, !this.hideTopBar ? (h("gx-ide-top-bar", { topBarTitle: this._componentLocale.componentName })) : null, h("div", { class: "gx-ide-main-wrapper gx-ide-overflow" }, 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.id, onValueChanged: this.selectObjectValueChangedHandler, ref: el => (this.selectObjectSuggestEl = el), part: "object-selector-suggest" }, 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: {
303
+ return (h(Host, { class: "gx-ide-component" }, h("div", { class: "gx-ide-main-wrapper gx-ide-overflow" }, 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.id, onValueChanged: this.selectObjectValueChangedHandler, ref: el => (this.selectObjectSuggestEl = el), part: "object-selector-suggest" }, 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: {
279
304
  "header__bottom": true,
280
305
  "header__bottom--hidden": this.barHidden
281
- } }, 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" }, h("gx-ide-container", { containerTitle: this._componentLocale.main.isReferencedBy, justifyContent: "center", part: "referenced-by-container" }, h("gxg-tree", { ref: el => (this.referencedByEl = el), class: { "gxi-hidden": !((_a = this.referencedBy) === null || _a === void 0 ? void 0 : _a.length) }, checkbox: false, part: "referenced-by-tree" }, renderTreeItems(convertReferenceDataToTreeData(this.referencedBy))), !((_b = this.referencedBy) === 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.referencedBy) === null || _c === void 0 ? void 0 : _c.length) === 0
306
+ } }, 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" }, h("gx-ide-container", { containerTitle: this._componentLocale.main.isReferencedBy, justifyContent: "center", fullHeight: true, part: "referenced-by-container" }, h("gxg-tree", { class: { "gxi-hidden": !((_a = this.referencedByTreeData) === null || _a === void 0 ? void 0 : _a.length) }, checkbox: true, 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
282
307
  ? this._componentLocale.main.isReferencedByEmpty
283
- : this._componentLocale.main.isReferencedByError))), h("gx-ide-container", { containerTitle: this._componentLocale.main.hasReferencesTo, justifyContent: "center", part: "references-to-container" }, h("gxg-tree", { ref: el => (this.referencesToEl = el), class: { "gxi-hidden": !((_d = this.referencesTo) === null || _d === void 0 ? void 0 : _d.length) }, checkbox: false, part: "references-to-tree" }, renderTreeItems(convertReferenceDataToTreeData(this.referencesTo))), !((_e = this.referencesTo) === 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.referencesTo) === null || _f === void 0 ? void 0 : _f.length) === 0
308
+ : this._componentLocale.main.isReferencedByError))), h("gx-ide-container", { containerTitle: this._componentLocale.main.hasReferencesTo, justifyContent: "center", fullHeight: true, 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
284
309
  ? this._componentLocale.main.hasReferencesEmpty
285
310
  : this._componentLocale.main.hasReferencesToError)))))));
286
311
  }
@@ -1,11 +1,13 @@
1
1
  import { r as registerInstance, h, H as Host } from './index-4f0a5746.js';
2
- import { r as renderTreeItems } from './render-tree-fc8636a3.js';
2
+ import { u as updateTreeModel, r as renderTreeItems } from './update-tree-model-80419058.js';
3
3
 
4
4
  const testCss = ":host{display:block}";
5
5
 
6
6
  const GxIdeUiTest = class {
7
7
  constructor(hostRef) {
8
8
  registerInstance(this, hostRef);
9
+ // 8.PUBLIC METHODS API //
10
+ // 9.LOCAL METHODS //
9
11
  /* Gxg-Tree Methods*/
10
12
  this.closeTreeNodeHandler = () => {
11
13
  this.tree.toggleItems(["number-1-1-2"], false);
@@ -31,9 +33,36 @@ const GxIdeUiTest = class {
31
33
  this.deleteNodeHandler = () => {
32
34
  this.treeModel = [];
33
35
  };
36
+ /* Update model test*/
37
+ // private showTree = () => {
38
+ // this.treeModel = [];
39
+ // };
40
+ // private updateTree = () => {
41
+ // this.treeModel = [];
42
+ // };
43
+ this.treeItemStateChangedHandler = (e) => {
44
+ // const event = e.detail.emittedBy;
45
+ const nodeData = e.detail.itemData;
46
+ const nodeId = e.detail.itemData.id;
47
+ if (nodeData.lazy) {
48
+ this.updateLazyCallback(nodeId).then(children => {
49
+ if (children === null || children === void 0 ? void 0 : children.length) {
50
+ const updatedTreeModel = updateTreeModel(this.treeModel, { id: nodeId, label: nodeData.label, items: children }, nodeId);
51
+ this.treeModel = updatedTreeModel;
52
+ }
53
+ });
54
+ }
55
+ };
34
56
  this.treeModel = undefined;
57
+ this.lazyNode = undefined;
58
+ this.updateLazyCallback = undefined;
59
+ this.newNode = undefined;
60
+ this.testUpdateNode = false;
35
61
  this.lazyLoadTreeItemsCallback = undefined;
36
62
  }
63
+ // 5.EVENTS (EMIT) //
64
+ // 6.COMPONENT LIFECYCLE METHODS //
65
+ // 7.LISTENERS //
37
66
  loadLazyChildrenHandler(e) {
38
67
  const treeItemId = e.detail;
39
68
  if (this.lazyLoadTreeItemsCallback) {
@@ -45,9 +74,17 @@ const GxIdeUiTest = class {
45
74
  }, 1000);
46
75
  }
47
76
  }
77
+ treeItemStateChanged(event) {
78
+ const updatedTreeModel = updateTreeModel(this.treeModel, event.detail, event.detail.id);
79
+ console.log("updatedTreeModel", updatedTreeModel);
80
+ }
81
+ // 10.RENDER() FUNCTION //
48
82
  render() {
49
- if (this.treeModel) {
50
- return (h(Host, null, h("gxg-tree", { id: "masterTree", checked: true, checkbox: true, multiSelection: true, ref: el => (this.tree = el) }, renderTreeItems(this.treeModel)), ",", h("div", { class: "tree-buttons" }, h("gxg-button", { type: "outlined", onClick: this.closeTreeNodeHandler }, "Close 1-1-2"), h("gxg-button", { type: "outlined", onClick: this.openTreeNodeHandler }, "Open 1-1-2"), h("gxg-button", { type: "outlined", onClick: this.toggleTreeNodeHandler }, "Toggle 1-1-2"), h("gxg-button", { type: "outlined", onClick: this.getSelectedItemsHandler }, "Get Selected Items"), h("gxg-button", { type: "outlined", onClick: this.getCheckedItemsHandler }, "Get Checked Items"), h("gxg-button", { type: "outlined", onClick: this.deleteNodeHandler }, "Delete Tree"))));
83
+ if (!this.testUpdateNode && this.treeModel) {
84
+ return (h(Host, null, h("gxg-tree", { checked: true, checkbox: true, multiSelection: true, ref: (el) => (this.tree = el) }, renderTreeItems(this.treeModel)), ",", h("div", { class: "tree-buttons" }, h("gxg-button", { type: "outlined", onClick: this.closeTreeNodeHandler }, "Close 1-1-2"), h("gxg-button", { type: "outlined", onClick: this.openTreeNodeHandler }, "Open 1-1-2"), h("gxg-button", { type: "outlined", onClick: this.toggleTreeNodeHandler }, "Toggle 1-1-2"), h("gxg-button", { type: "outlined", onClick: this.getSelectedItemsHandler }, "Get Selected Items"), h("gxg-button", { type: "outlined", onClick: this.getCheckedItemsHandler }, "Get Checked Items"), h("gxg-button", { type: "outlined", onClick: this.deleteNodeHandler }, "Delete Tree"))));
85
+ }
86
+ else if (this.testUpdateNode) {
87
+ return (h(Host, null, h("gxg-tree", { checked: true, checkbox: true, multiSelection: true, ref: (el) => (this.tree = el), onTreeItemStateChanged: this.treeItemStateChangedHandler }, renderTreeItems(this.treeModel))));
51
88
  }
52
89
  else {
53
90
  return h("slot", null);
@@ -1,7 +1,37 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-4f0a5746.js';
1
+ import { r as registerInstance, h, H as Host, g as getElement, c as createEvent } from './index-4f0a5746.js';
2
2
  import { f as formMessageLogic, r as requiredLabel } from './form-73d85602.js';
3
3
  import { f as formClasses } from './classesNames-6cd8fadb.js';
4
4
 
5
+ const topBarCss = ":host{display:block;box-sizing:border-box}.wrapper{display:flex;justify-content:space-between;padding:var(--spacing-comp-01) var(--spacing-comp-02);transition:background-color var(--gx-ide-timing-super-fast-ms);background-color:var(--gray-01)}gxg-title::part(title){color:var(--color-on-secondary);transition:color var(--gx-ide-timing-super-fast-ms)}";
6
+
7
+ const GxIdeTopBar = class {
8
+ constructor(hostRef) {
9
+ registerInstance(this, hostRef);
10
+ this.topBarTitle = undefined;
11
+ }
12
+ // 5.EVENTS (EMIT) //
13
+ // 6.METHODS //
14
+ componentWillLoad() {
15
+ this.evaluateSlots();
16
+ }
17
+ // 7.LISTENERS //
18
+ // 8.PUBLIC METHODS API //
19
+ // 9.LOCAL METHODS //
20
+ evaluateSlots() {
21
+ // header
22
+ const menuSlot = this.el.querySelectorAll('[slot="menu"]');
23
+ if (menuSlot.length) {
24
+ this._hasMenuSlot = true;
25
+ }
26
+ }
27
+ // 10.RENDER() FUNCTION //
28
+ render() {
29
+ return (h(Host, null, h("div", { class: "wrapper", part: "wrapper" }, h("div", { class: "wrapper__left", part: "wrapper-left" }, h("gxg-title", { type: "title-04", exportparts: "title: gxg-title" }, this.topBarTitle)), h("div", { class: "wrapper__right", part: "wrapper-right" }, this._hasMenuSlot ? (h("gxg-button", { type: "secondary-icon-only", icon: "gemini-tools/show-more-vertical" }, h("slot", { name: "menu" }))) : null))));
30
+ }
31
+ get el() { return getElement(this); }
32
+ };
33
+ GxIdeTopBar.style = topBarCss;
34
+
5
35
  const formRadioGroupCss = "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0;}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px;}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}:host{display:block}:host .label{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;display:flex;margin-bottom:var(--spacing-lay-xs);display:inline-block;margin-bottom:var(--spacing-comp-02)}:host .radios-wrapper{display:flex;flex-direction:column;gap:var(--gxg-form-control-gap--vertical)}.messages-wrapper{margin-top:var(--spacing-comp-02);display:flex;gap:var(--spacing-comp-01);flex-direction:column}:host(.gxg-form-radio-group--row) .radios-wrapper{flex-direction:row;gap:var(--gxg-form-control-gap--horizontal);align-items:center}:host .required{padding-left:2px}";
6
36
 
7
37
  const GxgFormRadioGroup = class {
@@ -205,4 +235,4 @@ const GxgFormRadioGroup = class {
205
235
  };
206
236
  GxgFormRadioGroup.style = formRadioGroupCss;
207
237
 
208
- export { GxgFormRadioGroup as gxg_form_radio_group };
238
+ export { GxIdeTopBar as gx_ide_top_bar, GxgFormRadioGroup as gxg_form_radio_group };
@@ -84,26 +84,32 @@ const GxgTree = class {
84
84
  this.evaluateIsMasterTree();
85
85
  }
86
86
  // 7.LISTENERS //
87
- selectionChangedHandler(e) {
88
- //Unselect all items, except the one that triggered this event. This action should be done once, by the master tree.
89
- if ((this.masterTree && !this.multiSelection) ||
90
- (this.masterTree && this.multiSelection && !e.detail.ctrlKey)) {
91
- const allChildren = this.el.querySelectorAll("gxg-tree-item");
92
- if (allChildren === null || allChildren === void 0 ? void 0 : allChildren.length) {
93
- Array.from(allChildren).forEach((item) => {
94
- item.selected = false;
95
- });
96
- }
87
+ checkboxToggledHandler(e) {
88
+ const itemData = e.detail;
89
+ if (this.masterTree) {
90
+ this.emitTreeItemNewState(itemData, "checkboxToggled");
97
91
  }
92
+ }
93
+ doubleClickedHandler(e) {
98
94
  const itemData = e.detail;
99
95
  if (this.masterTree) {
100
- this.emitTreeItemNewState(itemData, "selectionChanged");
96
+ this.emitTreeItemNewState(itemData, "doubleClicked");
101
97
  }
102
98
  }
103
- checkboxToggledHandler(e) {
99
+ selectionChangedHandler(e) {
100
+ //Unselect all items, except the one that triggered this event. This action should be done once, by the master tree.
101
+ const allChildren = this.el.querySelectorAll("gxg-tree-item");
102
+ if ((this.masterTree && this.multiSelection && !e.detail.ctrl) ||
103
+ (this.masterTree && !this.multiSelection)) {
104
+ Array.from(allChildren).forEach((item) => {
105
+ if (item !== e.detail.ref) {
106
+ item.selected = false;
107
+ }
108
+ });
109
+ }
104
110
  const itemData = e.detail;
105
111
  if (this.masterTree) {
106
- this.emitTreeItemNewState(itemData, "checkboxToggled");
112
+ this.emitTreeItemNewState(itemData, "selectionChanged");
107
113
  }
108
114
  }
109
115
  toggleIconClickedHandler(e) {
@@ -211,11 +217,11 @@ const gxgTreeItemCss = "/*! normalize.css v8.0.1 | MIT License | github.com/neco
211
217
  const GxgTreeItem = class {
212
218
  constructor(hostRef) {
213
219
  registerInstance(this, hostRef);
214
- this.toggleIconClicked = createEvent(this, "toggleIconClicked", 7);
215
- this.selectionChanged = createEvent(this, "selectionChanged", 7);
216
- this.doubleClicked = createEvent(this, "doubleClicked", 7);
217
220
  this.checkboxToggled = createEvent(this, "checkboxToggled", 7);
221
+ this.doubleClicked = createEvent(this, "doubleClicked", 7);
218
222
  this.lazyChanged = createEvent(this, "lazyChanged", 7);
223
+ this.selectionChanged = createEvent(this, "selectionChanged", 7);
224
+ this.toggleIconClicked = createEvent(this, "toggleIconClicked", 7);
219
225
  this.lazy = false; //True if not leaf but no children.
220
226
  this.parentTreeIsMasterTree = false;
221
227
  this.numberOfParentTrees = 1;
@@ -371,26 +377,16 @@ const GxgTreeItem = class {
371
377
  const checkboxClicked = e.target.nodeName === "GXG-FORM-CHECKBOX";
372
378
  if (toggleWasClicked || checkboxClicked)
373
379
  return;
374
- if (e.ctrlKey || !this.selected) {
375
- this.selectionChanged.emit({
376
- id: this.id,
377
- label: this.label,
378
- checked: this.checked,
379
- selected: !this.selected,
380
- ctrlKey: e.ctrlKey,
381
- });
382
- }
383
380
  if (e.ctrlKey) {
384
381
  this.selected = !this.selected;
385
382
  }
386
- else if (!this.selected) {
383
+ else {
387
384
  this.selected = true;
388
385
  }
386
+ this.selectionChanged.emit(this.getItemData(e.ctrlKey));
389
387
  };
390
388
  this.liTextDoubleClicked = () => {
391
- this.doubleClicked.emit({
392
- id: this.id,
393
- });
389
+ this.doubleClicked.emit(this.getItemData(false));
394
390
  !this.leaf && this.toggleClickedHandler();
395
391
  };
396
392
  this.liTextKeyDownPressed = (e) => {
@@ -625,29 +621,20 @@ const GxgTreeItem = class {
625
621
  this.toggleClickedHandler = () => {
626
622
  if (this.lazy && !this.opened) {
627
623
  this.downloading = true;
628
- this.toggleIconClicked.emit({
629
- checked: this.checked,
630
- description: this.description,
631
- icon: this.icon,
632
- id: this.id,
633
- indeterminate: this.indeterminate,
634
- label: this.label,
635
- lazy: this.lazy,
636
- leaf: this.leaf,
637
- opened: this.opened,
638
- selected: this.selected,
639
- });
624
+ this.toggleIconClicked.emit(this.getItemData());
640
625
  }
641
626
  if (!this.lazy) {
642
627
  this.opened = !this.opened;
643
628
  }
644
629
  };
645
- }
646
- checkedHandler(newValue, oldValue) {
647
- if (oldValue !== undefined) {
648
- this.checkboxToggled.emit({
649
- checked: newValue,
630
+ this.getItemData = (ctrl = false) => {
631
+ return {
632
+ ref: this.el,
633
+ checkbox: this.checkbox,
634
+ checked: this.checked,
635
+ ctrl: ctrl,
650
636
  description: this.description,
637
+ disabled: this.disabled,
651
638
  icon: this.icon,
652
639
  id: this.id,
653
640
  indeterminate: this.indeterminate,
@@ -656,23 +643,17 @@ const GxgTreeItem = class {
656
643
  leaf: this.leaf,
657
644
  opened: this.opened,
658
645
  selected: this.selected,
659
- });
646
+ };
647
+ };
648
+ }
649
+ checkedHandler(newValue, oldValue) {
650
+ if (oldValue !== undefined) {
651
+ this.checkboxToggled.emit(this.getItemData(false));
660
652
  }
661
653
  }
662
654
  openedHandler(newValue, oldValue) {
663
655
  if (oldValue !== undefined) {
664
- this.toggleIconClicked.emit({
665
- checked: this.checked,
666
- description: this.description,
667
- icon: this.icon,
668
- id: this.id,
669
- indeterminate: this.indeterminate,
670
- label: this.label,
671
- lazy: this.lazy,
672
- leaf: this.leaf,
673
- opened: newValue,
674
- selected: this.selected,
675
- });
656
+ this.toggleIconClicked.emit(this.getItemData(false));
676
657
  }
677
658
  }
678
659
  // 6.COMPONENT LIFECYCLE METHODS //