@genexus/genexus-ide-ui 1.0.70 → 1.0.71

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 (31) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +85 -19
  3. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.en.json +2 -1
  6. package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.ja.json +2 -1
  7. package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.zh.json +2 -1
  8. package/dist/collection/components/select-kb-items/helpers.js +68 -15
  9. package/dist/collection/components/select-kb-items/helpers.js.map +1 -1
  10. package/dist/collection/components/select-kb-items/select-kb-items.css +49 -0
  11. package/dist/collection/components/select-kb-items/select-kb-items.js +40 -4
  12. package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
  13. package/dist/components/gx-ide-select-kb-items.js +87 -19
  14. package/dist/components/gx-ide-select-kb-items.js.map +1 -1
  15. package/dist/esm/genexus-ide-ui.js +1 -1
  16. package/dist/esm/gx-ide-select-kb-items.entry.js +85 -19
  17. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  18. package/dist/esm/loader.js +1 -1
  19. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  20. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  21. package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.en.json +2 -1
  22. package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.ja.json +2 -1
  23. package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.zh.json +2 -1
  24. package/dist/genexus-ide-ui/p-526a7c54.entry.js +552 -0
  25. package/dist/genexus-ide-ui/p-526a7c54.entry.js.map +1 -0
  26. package/dist/types/components/select-kb-items/helpers.d.ts +8 -1
  27. package/dist/types/components/select-kb-items/select-kb-items.d.ts +15 -0
  28. package/dist/types/components.d.ts +8 -0
  29. package/package.json +1 -1
  30. package/dist/genexus-ide-ui/p-72d32141.entry.js +0 -478
  31. package/dist/genexus-ide-ui/p-72d32141.entry.js.map +0 -1
@@ -0,0 +1,552 @@
1
+ import { r as t, g as e, h as i, H as s, a as n } from "./p-25a9f1d7.js";
2
+
3
+ import { g as o } from "./p-6e4208d8.js";
4
+
5
+ import "./p-c9551186.js";
6
+
7
+ import { L as a } from "./p-311eedf3.js";
8
+
9
+ const r = o({
10
+ category: "system",
11
+ name: "check-circle",
12
+ colorType: "primary"
13
+ });
14
+
15
+ const convertItemsNodeListToFlattenedTreeViewModel = (t, e) => {
16
+ const i = [];
17
+ const processNode = t => {
18
+ var s;
19
+ const n = t.active && !t.iconStart ? r : t.iconStart;
20
+ const o = !((s = t.nodes) === null || s === void 0 ? void 0 : s.length);
21
+ const a = e === "all" || e === "custom" && t.checkbox || e === "leaf" && o;
22
+ const c = JSON.stringify({
23
+ versionType: t.type
24
+ });
25
+ i.push({
26
+ caption: t.name,
27
+ checkbox: a,
28
+ checked: t.checked,
29
+ startImgSrc: n,
30
+ endImgSrc: t.iconEnd,
31
+ expanded: t.expanded,
32
+ id: t.id.toString(),
33
+ items: null,
34
+ leaf: o,
35
+ metadata: c,
36
+ parts: t.parts,
37
+ selected: t.selected
38
+ });
39
+ if (t.nodes) {
40
+ t.nodes.forEach((t => processNode(t)));
41
+ }
42
+ };
43
+ t.forEach((t => processNode(t)));
44
+ return i;
45
+ };
46
+
47
+ const convertItemsListToTreeViewModel = (t, e) => {
48
+ const i = [];
49
+ t.forEach((t => {
50
+ var s;
51
+ const n = t.active && !t.iconStart ? r : t.iconStart;
52
+ const o = !((s = t.nodes) === null || s === void 0 ? void 0 : s.length);
53
+ const a = e === "all" || e === "custom" && t.checkbox || e === "leaf" && o;
54
+ const c = t.expanded;
55
+ const h = n;
56
+ const l = t.iconEnd;
57
+ const d = JSON.stringify({
58
+ versionType: t.type
59
+ });
60
+ const f = parseInt(t.id);
61
+ i.push({
62
+ caption: t.name,
63
+ checkbox: a,
64
+ checked: t.checked,
65
+ startImgSrc: h,
66
+ endImgSrc: l,
67
+ expanded: c,
68
+ id: t.id.toString(),
69
+ items: !o ? convertItemsListToTreeViewModel(t.nodes, e) : null,
70
+ leaf: o,
71
+ metadata: d,
72
+ parts: t.parts,
73
+ order: f,
74
+ selected: t.selected
75
+ });
76
+ }));
77
+ return i;
78
+ };
79
+
80
+ const findItemNode = (t, e) => {
81
+ if (e.id === t) {
82
+ return e;
83
+ }
84
+ if (e.nodes) {
85
+ for (const i of e.nodes) {
86
+ const e = findItemNode(t, i);
87
+ if (e) {
88
+ return e;
89
+ }
90
+ }
91
+ }
92
+ return null;
93
+ };
94
+
95
+ function findItemInArray(t, e) {
96
+ for (const i of t) {
97
+ const t = findItemNode(e, i);
98
+ if (t) {
99
+ return t;
100
+ }
101
+ }
102
+ return null;
103
+ }
104
+
105
+ const setAllLeafsCheckedFalse = t => {
106
+ const uncheck = t => {
107
+ var e;
108
+ t.checked = false;
109
+ if ((e = t.nodes) === null || e === void 0 ? void 0 : e.length) {
110
+ t.nodes.forEach((t => uncheck(t)));
111
+ }
112
+ };
113
+ t.forEach((t => uncheck(t)));
114
+ return t;
115
+ };
116
+
117
+ const unselectAllNodes = t => {
118
+ const unselect = t => {
119
+ var e;
120
+ t.selected = false;
121
+ if ((e = t.nodes) === null || e === void 0 ? void 0 : e.length) {
122
+ t.nodes.forEach((t => unselect(t)));
123
+ }
124
+ };
125
+ t.forEach((t => unselect(t)));
126
+ };
127
+
128
+ const checkItems = (t, e) => {
129
+ setAllLeafsCheckedFalse(t);
130
+ e.forEach((e => {
131
+ const i = findItemInArray(t, e);
132
+ if (i) {
133
+ i.checked = true;
134
+ }
135
+ }));
136
+ return t;
137
+ };
138
+
139
+ const expandItems = (t, e) => {
140
+ e.forEach((e => {
141
+ const i = findItemInArray(t, e);
142
+ if (i) {
143
+ i.expanded = true;
144
+ }
145
+ }));
146
+ return t;
147
+ };
148
+
149
+ const selectItems = (t, e) => {
150
+ e.forEach((e => {
151
+ const i = findItemInArray(t, e);
152
+ if (i) {
153
+ i.selected = true;
154
+ }
155
+ }));
156
+ return t;
157
+ };
158
+
159
+ function searchInNode(t, e) {
160
+ var i;
161
+ // If the current node is the searched node, we return an empty list (it has no parents in this branch)
162
+ if (t.id === e) {
163
+ return [];
164
+ }
165
+ // We traverse each child looking for the target node
166
+ if ((i = t.nodes) === null || i === void 0 ? void 0 : i.length) {
167
+ for (const i of t.nodes) {
168
+ const s = searchInNode(i, e);
169
+ if (s !== null) {
170
+ // If we find it, we include the current node at the beginning of the path and return
171
+ return [ t.id, ...s ];
172
+ }
173
+ }
174
+ }
175
+ return null;
176
+ }
177
+
178
+ const searchParentsItems = (t, e) => {
179
+ const i = [];
180
+ for (const s of e) {
181
+ for (const e of t) {
182
+ const t = searchInNode(e, s);
183
+ if (t !== null) {
184
+ t.forEach((t => {
185
+ i.push(t);
186
+ }));
187
+ }
188
+ }
189
+ }
190
+ return i;
191
+ };
192
+
193
+ /**
194
+ * Recursively searches for the first node with the active=true property
195
+ * @param nodes Array of nodes to search through
196
+ * @returns An object with caption, iconStart, and path to the first active node found, or null if none is found
197
+ */ const findFirstActiveNode = t => {
198
+ // Helper function that keeps track of the path during recursion
199
+ const findActiveWithPath = (t, e = []) => {
200
+ // Base case: if nodes is undefined or empty
201
+ if (!t || t.length === 0) {
202
+ return null;
203
+ }
204
+ // Iterate through each node in the array
205
+ for (const i of t) {
206
+ // Create a new path that includes the current node
207
+ const t = [ ...e, i.id ];
208
+ // Check if the current node is active
209
+ if (i.active === true) {
210
+ return {
211
+ caption: i.name,
212
+ iconStart: i.iconStart,
213
+ path: t
214
+ };
215
+ }
216
+ // If the node has children, search through them with the updated path
217
+ if (i.nodes && i.nodes.length > 0) {
218
+ const e = findActiveWithPath(i.nodes, t);
219
+ // If we find an active node in this subtree, return it immediately
220
+ if (e !== null) {
221
+ return e;
222
+ }
223
+ }
224
+ }
225
+ // No active node found in any of the nodes
226
+ return null;
227
+ };
228
+ // Start the search with an empty path
229
+ return findActiveWithPath(t);
230
+ };
231
+
232
+ const c = ':host{display:grid;block-size:100%;grid-template-rows:max-content 1fr max-content}.header.has-active-item{grid-area:header}.section{display:contents}.header{grid-template-areas:"view-mode view-mode" "pattern-filter active-item";grid-template-columns:minmax(150px, 350px) max-content;--field-group__column-gap:var(\n --mer-spacing--md\n )}.view-mode__toggle-checkboxes{grid-area:view-mode}.pattern-filter{grid-area:pattern-filter;max-inline-size:350px}.active-item{grid-area:active-item;background-color:var(--mer-surface__elevation--01);border-radius:var(--mer-border__radius--sm);padding:var(--mer-spacing--xs) var(--mer-spacing--sm);display:flex;align-items:center;gap:var(--mer-spacing--xs)}.active-item__icon-container{display:contents}.active-item__icon{pointer-events:none}.active-item__link{text-decoration:underline;color:var(--mer-text__primary);cursor:pointer}.active-item__link:hover{color:var(--mer-text__primary--hover)}.active-item__link:active{color:var(--mer-text__primary--active)}.view-mode__toggle-checkboxes{grid-template-columns:max-content max-content}.field__items-view-type{align-items:center}.field__items-view-type .label{margin-block-start:0 !important}.field__toggle-checkboxes .label{margin-block-start:0 !important}.trees{position:relative}';
233
+
234
+ var h = undefined && undefined.__classPrivateFieldSet || function(t, e, i, s, n) {
235
+ if (s === "m") throw new TypeError("Private method is not writable");
236
+ if (s === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
237
+ if (typeof e === "function" ? t !== e || !n : !e.has(t)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
238
+ return s === "a" ? n.call(t, i) : n ? n.value = i : e.set(t, i), i;
239
+ };
240
+
241
+ var l = undefined && undefined.__classPrivateFieldGet || function(t, e, i, s) {
242
+ if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
243
+ if (typeof e === "function" ? t !== e || !s : !e.has(t)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
244
+ return i === "m" ? s : i === "a" ? s.call(t) : s ? s.value : e.get(t);
245
+ };
246
+
247
+ var d, f, u, p, m, v, g, w, b, k, y, _, x, W, M, I, C, S, T, j, N, L, E;
248
+
249
+ const A = [ "resets/box-sizing", "chameleon/scrollbar", "components/tooltip", "components/tree-view", "utils/form--full", "utils/layout", "utils/spacing", "utils/typography" ];
250
+
251
+ const z = o({
252
+ category: "system",
253
+ name: "search",
254
+ colorType: "on-surface"
255
+ });
256
+
257
+ const H = "tree";
258
+
259
+ const O = "list";
260
+
261
+ const P = "on";
262
+
263
+ const F = class {
264
+ constructor(s) {
265
+ t(this, s);
266
+ d.set(this, void 0);
267
+ f.set(this, []);
268
+ u.set(this, void 0);
269
+ p.set(this, []);
270
+ m.set(this, e(`./gx-ide-assets/select-kb-items/shortcuts.json`));
271
+ v.set(this, []);
272
+ g.set(this, void 0);
273
+ w.set(this, void 0);
274
+ b.set(this, (() => {
275
+ if (this.cancelCallback) {
276
+ this.cancelCallback();
277
+ }
278
+ }));
279
+ k.set(this, (async t => {
280
+ const e = [];
281
+ t.detail.forEach((t => {
282
+ t.item.checked && e.push(t.item.id);
283
+ }));
284
+ h(this, f, e, "f");
285
+ h(this, v, checkItems(this.itemsList, l(this, f, "f")), "f");
286
+ if (this.checkedChanged) {
287
+ this.checkedChanged(l(this, f, "f"));
288
+ }
289
+ }));
290
+ y.set(this, (() => {
291
+ if (this.confirmCallback) {
292
+ this.confirmCallback(l(this, f, "f"));
293
+ }
294
+ }));
295
+ _.set(this, (async t => {
296
+ if (this.itemContextMenuCallback) {
297
+ let e;
298
+ const i = l(this, p, "f").find((e => e === t.detail.id));
299
+ if (!l(this, p, "f").length || !i) {
300
+ await l(this, w, "f").updateItemsProperties(l(this, p, "f"), {
301
+ selected: false
302
+ });
303
+ await l(this, w, "f").updateItemsProperties([ t.detail.id ], {
304
+ selected: true
305
+ });
306
+ e = {
307
+ clientX: t.detail.contextmenuEvent.clientX,
308
+ clientY: t.detail.contextmenuEvent.clientY,
309
+ selection: [ t.detail.id ]
310
+ };
311
+ } else {
312
+ e = {
313
+ clientX: t.detail.contextmenuEvent.clientX,
314
+ clientY: t.detail.contextmenuEvent.clientY,
315
+ selection: l(this, p, "f")
316
+ };
317
+ }
318
+ this.itemContextMenuCallback(e);
319
+ }
320
+ }));
321
+ x.set(this, (t => () => {
322
+ t(l(this, f, "f"), l(this, p, "f"));
323
+ }));
324
+ W.set(this, (t => {
325
+ this.searchPatternValue = t.detail.toString();
326
+ }));
327
+ M.set(this, (() => i("div", null, this.dialogActions.map((t => i("button", {
328
+ class: "button-tertiary",
329
+ part: `button button-${t.name}`,
330
+ onClick: l(this, x, "f").call(this, t.callback),
331
+ disabled: this.loading
332
+ }, t.name))))));
333
+ I.set(this, (() => i("footer", {
334
+ class: "footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between"
335
+ }, l(this, M, "f").call(this), i("div", {
336
+ class: "buttons-spacer "
337
+ }, this.cancelCallback && i("button", {
338
+ class: "button-secondary",
339
+ part: "cancel-button",
340
+ onClick: l(this, b, "f")
341
+ }, l(this, d, "f").footer.cancel), this.confirmCallback && i("button", {
342
+ class: "button-primary",
343
+ part: "confirm-button",
344
+ onClick: l(this, y, "f"),
345
+ disabled: this.loading
346
+ }, l(this, d, "f").footer.select)))));
347
+ C.set(this, (t => {
348
+ const e = [];
349
+ unselectAllNodes(this.itemsList);
350
+ t.detail.forEach((t => {
351
+ e.push(t.item.id);
352
+ }));
353
+ h(this, p, e, "f");
354
+ if (this.selectionChanged) {
355
+ this.selectionChanged(l(this, p, "f"));
356
+ }
357
+ h(this, v, selectItems(this.itemsList, e), "f");
358
+ }));
359
+ S.set(this, (async t => {
360
+ const e = searchParentsItems(this.itemsList, t);
361
+ const i = selectItems(this.itemsList, t);
362
+ const s = expandItems(i, e);
363
+ l(this, j, "f").call(this, s);
364
+ }));
365
+ T.set(this, (async t => {
366
+ const e = searchParentsItems(this.itemsList, t);
367
+ const i = expandItems(this.itemsList, e);
368
+ l(this, j, "f").call(this, i);
369
+ }));
370
+ j.set(this, (t => {
371
+ this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(t, this.checkboxType);
372
+ this.nodeListFlattenedTreeModel = convertItemsNodeListToFlattenedTreeViewModel(t, this.checkboxType);
373
+ }));
374
+ N.set(this, (async t => {
375
+ const e = t.detail;
376
+ this.nodesVersionsViewType = e;
377
+ if (this.nodesVersionsViewType === "tree") {
378
+ await l(this, S, "f").call(this, l(this, p, "f"));
379
+ await l(this, T, "f").call(this, l(this, f, "f"));
380
+ }
381
+ l(this, j, "f").call(this, l(this, v, "f"));
382
+ }));
383
+ L.set(this, (t => {
384
+ this.toggleCheckboxes = t.detail === P;
385
+ }));
386
+ E.set(this, (() => {
387
+ var t;
388
+ const e = l(this, w, "f") && ((t = this.activeItemNode) === null || t === void 0 ? void 0 : t.path);
389
+ if (e) {
390
+ l(this, w, "f").scrollIntoVisible(this.activeItemNode.path);
391
+ }
392
+ if (this.activeItemCallback) {
393
+ this.activeItemCallback();
394
+ }
395
+ }));
396
+ this.activeItemNode = undefined;
397
+ this.nodeListFlattenedTreeModel = [];
398
+ this.loading = true;
399
+ this.nodesVersionsViewType = "tree";
400
+ this.nodeVersionsListTreeModel = [];
401
+ this.searchPatternValue = null;
402
+ this.toggleCheckboxes = true;
403
+ this.activeItemCallback = undefined;
404
+ this.cancelCallback = undefined;
405
+ this.checkboxType = undefined;
406
+ this.expandOnClick = true;
407
+ this.checkedChanged = undefined;
408
+ this.confirmCallback = undefined;
409
+ this.dialogActions = [];
410
+ this.itemContextMenuCallback = undefined;
411
+ this.itemsList = [];
412
+ this.multiSelection = false;
413
+ this.selectionChanged = undefined;
414
+ }
415
+ watchNodeListHandler(t) {
416
+ if (t.length > 0) {
417
+ this.loading = false;
418
+ }
419
+ l(this, j, "f").call(this, t);
420
+ // Check and update activeItem
421
+ this.activeItemNode = findFirstActiveNode(t);
422
+ }
423
+ async componentWillLoad() {
424
+ h(this, d, await a.getComponentStrings(this.el), "f");
425
+ h(this, g, [ {
426
+ value: H,
427
+ caption: l(this, d, "f").main.tree
428
+ }, {
429
+ value: O,
430
+ caption: "List"
431
+ } ], "f");
432
+ this.watchNodeListHandler(this.itemsList);
433
+ }
434
+ /**
435
+ * Suspends or reactivates the shortcuts
436
+ */ async suspendShortcuts(t) {
437
+ if (t) {
438
+ l(this, u, "f").suspend = true;
439
+ } else {
440
+ l(this, u, "f").suspend = false;
441
+ }
442
+ }
443
+ /**
444
+ * Allow to update the selected items
445
+ */ async updateSelection(t) {
446
+ // first clear selected
447
+ l(this, w, "f").updateItemsProperties(l(this, p, "f"), {
448
+ selected: false
449
+ });
450
+ // then select
451
+ l(this, w, "f").updateItemsProperties(t, {
452
+ selected: true
453
+ });
454
+ }
455
+ render() {
456
+ return i(s, {
457
+ class: "widget"
458
+ }, i("ch-theme", {
459
+ model: A
460
+ }), i("ch-shortcuts", {
461
+ src: l(this, m, "f"),
462
+ ref: t => h(this, u, t, "f")
463
+ }), i("section", {
464
+ class: "section"
465
+ }, i("header", {
466
+ class: "header control-header field-group spacing-body-block-start spacing-body-inline"
467
+ }, i("div", {
468
+ class: "field-group view-mode__toggle-checkboxes"
469
+ }, i("div", {
470
+ class: "field field-inline field__items-view-type"
471
+ }, i("label", {
472
+ class: "label",
473
+ htmlFor: "view-mode"
474
+ }, "Select view mode:"), i("ch-radio-group-render", {
475
+ class: "radio-group",
476
+ id: "view-mode",
477
+ model: l(this, g, "f"),
478
+ onChange: l(this, N, "f"),
479
+ value: l(this, g, "f")[0].value
480
+ })), this.checkboxType !== "none" && i("div", {
481
+ class: "field field-inline field__toggle-checkboxes"
482
+ }, i("label", {
483
+ class: "label",
484
+ htmlFor: "toggle-checkboxes"
485
+ }, "Toggle Checkboxes"), i("ch-checkbox", {
486
+ class: "checkbox",
487
+ id: "toggle-checkboxes",
488
+ checkedValue: P,
489
+ value: P,
490
+ onInput: l(this, L, "f")
491
+ }))), i("ch-edit", {
492
+ class: "input pattern-filter",
493
+ placeholder: l(this, d, "f").header.searchPatternPlaceholder,
494
+ startImgSrc: z,
495
+ onInput: l(this, W, "f")
496
+ }), this.activeItemNode && i("div", {
497
+ class: "active-item"
498
+ }, i("span", {
499
+ class: "active-item__icon-container"
500
+ }, i("ch-image", {
501
+ class: "icon-md active-item__icon",
502
+ src: this.activeItemNode.iconStart || r,
503
+ containerRef: null
504
+ })), l(this, d, "f").header.activeItem, i("button", {
505
+ class: "active-item__link",
506
+ onClick: l(this, E, "f")
507
+ }, this.activeItemNode.caption))), i("div", {
508
+ class: "spacing-body-inline-start trees"
509
+ }, this.loading ? i("gx-ide-loader", {
510
+ loaderTitle: l(this, d, "f").loader.title,
511
+ show: true
512
+ }) : i("ch-tree-view-render", {
513
+ class: "tree-view",
514
+ model: this.nodesVersionsViewType === "tree" ? this.nodeVersionsListTreeModel : this.nodeListFlattenedTreeModel,
515
+ "show-lines": this.nodesVersionsViewType === "tree" ? "all" : "none",
516
+ expandableButton: this.nodesVersionsViewType === "tree" ? "decorative" : "no",
517
+ onItemContextmenu: l(this, _, "f"),
518
+ onCheckedItemsChange: l(this, k, "f"),
519
+ onSelectedItemsChange: l(this, C, "f"),
520
+ expandOnClick: this.expandOnClick,
521
+ multiSelection: this.multiSelection,
522
+ filter: this.searchPatternValue,
523
+ filterType: "caption",
524
+ toggleCheckboxes: this.toggleCheckboxes,
525
+ ref: t => {
526
+ h(this, w, t, "f");
527
+ }
528
+ })), (this.dialogActions.length > 0 || this.cancelCallback || this.confirmCallback) && l(this, I, "f").call(this)));
529
+ }
530
+ static get assetsDirs() {
531
+ return [ "gx-ide-assets/select-kb-items" ];
532
+ }
533
+ get el() {
534
+ return n(this);
535
+ }
536
+ static get watchers() {
537
+ return {
538
+ itemsList: [ "watchNodeListHandler" ]
539
+ };
540
+ }
541
+ };
542
+
543
+ d = new WeakMap, f = new WeakMap, u = new WeakMap, p = new WeakMap, m = new WeakMap,
544
+ v = new WeakMap, g = new WeakMap, w = new WeakMap, b = new WeakMap, k = new WeakMap,
545
+ y = new WeakMap, _ = new WeakMap, x = new WeakMap, W = new WeakMap, M = new WeakMap,
546
+ I = new WeakMap, C = new WeakMap, S = new WeakMap, T = new WeakMap, j = new WeakMap,
547
+ N = new WeakMap, L = new WeakMap, E = new WeakMap;
548
+
549
+ F.style = c;
550
+
551
+ export { F as gx_ide_select_kb_items };
552
+ //# sourceMappingURL=p-526a7c54.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ACTIVE_ITEM_DEFAULT_ICON","getIconPath","category","name","colorType","convertItemsNodeListToFlattenedTreeViewModel","itemsList","checkboxType","itemsListFlattenedTreeViewModel","processNode","item","startImgSrc","active","iconStart","leaf","_a","nodes","length","checkbox","metaData","JSON","stringify","versionType","type","push","caption","checked","endImgSrc","iconEnd","expanded","id","toString","items","metadata","parts","selected","forEach","childNode","convertItemsListToTreeViewModel","itemsListTreeViewModel","order","parseInt","findItemNode","itemNode","result","findItemInArray","itemsNodes","setAllLeafsCheckedFalse","uncheck","unselectAllNodes","unselect","checkItems","idsChecked","itemFind","expandItems","selectItems","idsSelected","searchInNode","node","parents","searchParentsItems","ids","rootItem","results","findFirstActiveNode","findActiveWithPath","nodeList","currentPath","nodePath","path","selectKbItemsCss","CSS_BUNDLES","SYSTEM_SEARCH_ICON","VIEW_AS_TREE_ID","VIEW_AS_LIST_ID","TOGGLE_CHECKBOXES_CHECKED_VALUE","GxIdeSelectKbItems","_GxIdeSelectKbItems__componentLocale","set","this","_GxIdeSelectKbItems_checkedNodesIds","_GxIdeSelectKbItems_chShortcutsEl","_GxIdeSelectKbItems_selectedNodesIds","_GxIdeSelectKbItems_shortcutsSrc","getAssetPath","_GxIdeSelectKbItems_updatedModelList","_GxIdeSelectKbItems_viewItemsAsModel","_GxIdeSelectKbItems_treeViewRenderEl","_GxIdeSelectKbItems_cancelHandler","cancelCallback","_GxIdeSelectKbItems_checkedItemsChangeHandler","async","e","checkedNodesIds","detail","__classPrivateFieldSet","__classPrivateFieldGet","checkedChanged","_GxIdeSelectKbItems_confirmHandler","confirmCallback","_GxIdeSelectKbItems_contextMenuHandler","itemContextMenuCallback","info","isSelected","find","updateItemsProperties","clientX","contextmenuEvent","clientY","selection","_GxIdeSelectKbItems_executeDialogAction","callback","_GxIdeSelectKbItems_patternSearchValueChangedHandler","event","searchPatternValue","_GxIdeSelectKbItems_renderActionButtons","h","dialogActions","map","action","class","part","onClick","call","disabled","loading","_GxIdeSelectKbItems_renderFooter","footer","cancel","select","_GxIdeSelectKbItems_selectedItemsChangeHandler","selectedNodesIds","selectionChanged","_GxIdeSelectKbItems_toggleAndSelectNodesInModelItems","selectedItemsIds","nodesToToggle","newItemsSelected","newItemsExpanded","_GxIdeSelectKbItems_updateViews","_GxIdeSelectKbItems_toggleCheckedNodesInModelItems","newItemsList","nodeVersionsListTreeModel","nodeListFlattenedTreeModel","_GxIdeSelectKbItems_viewItemsAsChangedHandler","selectedViewType","nodesVersionsViewType","_GxIdeSelectKbItems_toggleCheckboxesChangedHandler","toggleCheckboxes","_GxIdeSelectKbItems_scrollIntoActiveVersionNode","doScrollIntoView","activeItemNode","scrollIntoVisible","activeItemCallback","watchNodeListHandler","componentWillLoad","Locale","getComponentStrings","el","value","main","tree","suspendShortcuts","suspend","updateSelection","render","Host","model","src","ref","htmlFor","onChange","checkedValue","onInput","placeholder","header","searchPatternPlaceholder","containerRef","activeItem","loaderTitle","loader","title","show","expandableButton","onItemContextmenu","onCheckedItemsChange","onSelectedItemsChange","expandOnClick","multiSelection","filter","filterType"],"sources":["src/components/select-kb-items/helpers.tsx","src/components/select-kb-items/select-kb-items.scss?tag=gx-ide-select-kb-items&encapsulation=shadow","src/components/select-kb-items/select-kb-items.tsx"],"sourcesContent":["import { ItemNode, CheckboxType, ActiveNode } from \"./select-kb-items\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath } from \"@genexus/mercury\";\n\nexport const ACTIVE_ITEM_DEFAULT_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"primary\"\n});\n\nexport const convertItemsNodeListToFlattenedTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListFlattenedTreeViewModel: TreeViewItemModel[] = [];\n\n const processNode = (item: ItemNode) => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const metaData = JSON.stringify({\n versionType: item.type\n });\n itemsListFlattenedTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: startImgSrc,\n endImgSrc: item.iconEnd,\n expanded: item.expanded,\n id: item.id.toString(),\n items: null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n selected: item.selected\n });\n\n if (item.nodes) {\n item.nodes.forEach(childNode => processNode(childNode));\n }\n };\n\n itemsList.forEach(item => processNode(item));\n return itemsListFlattenedTreeViewModel;\n};\n\nexport const convertItemsListToTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListTreeViewModel: TreeViewItemModel[] = [];\n itemsList.forEach(item => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const expanded = item.expanded;\n const iconStart = startImgSrc;\n const iconEnd = item.iconEnd;\n const metaData = JSON.stringify({\n versionType: item.type\n });\n const order = parseInt(item.id);\n itemsListTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: iconStart,\n endImgSrc: iconEnd,\n expanded: expanded,\n id: item.id.toString(),\n items: !leaf\n ? convertItemsListToTreeViewModel(item.nodes, checkboxType)\n : null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n order: order,\n selected: item.selected\n });\n });\n\n return itemsListTreeViewModel;\n};\n\nconst findItemNode = (id: string, item: ItemNode): ItemNode | null => {\n if (item.id === id) {\n return item;\n }\n\n if (item.nodes) {\n for (const itemNode of item.nodes) {\n const result = findItemNode(id, itemNode);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\nfunction findItemInArray(itemsNodes: ItemNode[], id: string): ItemNode | null {\n for (const item of itemsNodes) {\n const result = findItemNode(id, item);\n if (result) {\n return result;\n }\n }\n return null;\n}\nconst setAllLeafsCheckedFalse = (itemsList: ItemNode[]): ItemNode[] => {\n const uncheck = (itemNode: ItemNode) => {\n itemNode.checked = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => uncheck(childNode));\n }\n };\n\n itemsList.forEach(item => uncheck(item));\n return itemsList;\n};\n\nexport const unselectAllNodes = (itemsList: ItemNode[]) => {\n const unselect = (itemNode: ItemNode) => {\n itemNode.selected = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => unselect(childNode));\n }\n };\n\n itemsList.forEach(item => unselect(item));\n};\n\nexport const checkItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n setAllLeafsCheckedFalse(itemsList);\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.checked = true;\n }\n });\n\n return itemsList;\n};\n\nexport const expandItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.expanded = true;\n }\n });\n\n return itemsList;\n};\n\nexport const selectItems = (\n itemsList: ItemNode[],\n idsSelected: string[]\n): ItemNode[] => {\n idsSelected.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.selected = true;\n }\n });\n return itemsList;\n};\n\nfunction searchInNode(item: ItemNode, id: string): string[] | null {\n // If the current node is the searched node, we return an empty list (it has no parents in this branch)\n if (item.id === id) {\n return [];\n }\n\n // We traverse each child looking for the target node\n if (item.nodes?.length) {\n for (const node of item.nodes) {\n const parents = searchInNode(node, id);\n if (parents !== null) {\n // If we find it, we include the current node at the beginning of the path and return\n return [item.id, ...parents];\n }\n }\n }\n return null;\n}\n\nexport const searchParentsItems = (\n items: ItemNode[],\n ids: string[]\n): string[] | null => {\n const parents: string[] = [];\n for (const id of ids) {\n for (const rootItem of items) {\n const results = searchInNode(rootItem, id);\n if (results !== null) {\n results.forEach(result => {\n parents.push(result);\n });\n }\n }\n }\n return parents;\n};\n\n/**\n * Recursively searches for the first node with the active=true property\n * @param nodes Array of nodes to search through\n * @returns An object with caption, iconStart, and path to the first active node found, or null if none is found\n */\nexport const findFirstActiveNode = (nodes: ItemNode[]): ActiveNode | null => {\n // Helper function that keeps track of the path during recursion\n const findActiveWithPath = (\n nodeList: ItemNode[],\n currentPath: string[] = []\n ): ActiveNode | null => {\n // Base case: if nodes is undefined or empty\n if (!nodeList || nodeList.length === 0) {\n return null;\n }\n\n // Iterate through each node in the array\n for (const node of nodeList) {\n // Create a new path that includes the current node\n const nodePath = [...currentPath, node.id];\n\n // Check if the current node is active\n if (node.active === true) {\n return {\n caption: node.name,\n iconStart: node.iconStart,\n path: nodePath\n };\n }\n\n // If the node has children, search through them with the updated path\n if (node.nodes && node.nodes.length > 0) {\n const result = findActiveWithPath(node.nodes, nodePath);\n // If we find an active node in this subtree, return it immediately\n if (result !== null) {\n return result;\n }\n }\n }\n\n // No active node found in any of the nodes\n return null;\n };\n\n // Start the search with an empty path\n return findActiveWithPath(nodes);\n};\n",":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.header.has-active-item {\n grid-area: header;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n grid-template-areas:\n \"view-mode view-mode\"\n \"pattern-filter active-item\";\n grid-template-columns: minmax(150px, 350px) max-content;\n --field-group__column-gap: var(\n --mer-spacing--md\n ); // WA: OVerriding this variable is not a good approeach to reduce the gap.TODO: Think about the right solution.\n}\n.view-mode__toggle-checkboxes {\n grid-area: view-mode;\n}\n.pattern-filter {\n grid-area: pattern-filter;\n max-inline-size: 350px;\n}\n\n.active-item {\n grid-area: active-item;\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n.active-item {\n &__icon-container {\n display: contents;\n }\n &__icon {\n pointer-events: none; // We do not want the icon to change the colors, since the clickable area is the caption only\n }\n &__link {\n text-decoration: underline;\n // TODO: There should be a class in Merucry to apply link styles\n color: var(--mer-text__primary);\n cursor: pointer;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n }\n}\n\n.view-mode__toggle-checkboxes {\n grid-template-columns: max-content max-content;\n}\n.field__items-view-type {\n align-items: center;\n .label {\n margin-block-start: 0 !important; // WA to center label with radio-group\n }\n}\n.field__toggle-checkboxes {\n .label {\n margin-block-start: 0 !important; // WA to center label with radio-group\n }\n}\n\n.trees {\n position: relative;\n}\n","import {\n Component,\n Element,\n getAssetPath,\n Host,\n h,\n Prop,\n State,\n Watch,\n Method\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TreeViewItemModel,\n TreeViewItemModelExtended\n} from \"@genexus/chameleon-controls-library\";\n\nimport {\n checkItems,\n convertItemsListToTreeViewModel,\n convertItemsNodeListToFlattenedTreeViewModel,\n expandItems,\n searchParentsItems,\n selectItems,\n unselectAllNodes,\n findFirstActiveNode\n} from \"./helpers\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo } from \"../../common/types\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nimport { ACTIVE_ITEM_DEFAULT_ICON } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/tooltip\",\n \"components/tree-view\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\nconst SYSTEM_SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\nconst VIEW_AS_TREE_ID: NodesVersionsViewType = \"tree\";\nconst VIEW_AS_LIST_ID: NodesVersionsViewType = \"list\";\n\nconst TOGGLE_CHECKBOXES_CHECKED_VALUE = \"on\";\n\n@Component({\n tag: \"gx-ide-select-kb-items\",\n styleUrl: \"select-kb-items.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/select-kb-items\"]\n})\nexport class GxIdeSelectKbItems {\n #_componentLocale: any;\n\n #checkedNodesIds: string[] = [];\n #chShortcutsEl: HTMLChShortcutsElement;\n #selectedNodesIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/select-kb-items/shortcuts.json`\n );\n #updatedModelList: ItemNode[] = [];\n\n #viewItemsAsModel: RadioGroupItemModel[];\n\n @Element() el: HTMLGxIdeSelectKbItemsElement;\n #treeViewRenderEl: HTMLChTreeViewRenderElement;\n\n /**\n * Represents the active version node caption and icon (if any)\n */\n @State() activeItemNode: ActiveNode;\n\n /**\n * Represents the nodes list model\n */\n @State() nodeListFlattenedTreeModel: TreeViewItemModel[] = [];\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * View type for the nodes.\n */\n @State() nodesVersionsViewType: NodesVersionsViewType = \"tree\";\n\n /**\n * Represents the nodes tree model\n */\n @State() nodeVersionsListTreeModel: TreeViewItemModel[] = [];\n\n /**\n * \"Search Pattern\" input value, used to filter the nodes tree/list.\n */\n @State() searchPatternValue: string = null;\n\n /**\n * It maps to the ch-tree-view-render \"toggleCheckboxes\" property.\n */\n @State() toggleCheckboxes: boolean = true;\n\n /**\n * Callback emitted when the user clicks on the \"Active item\"\n */\n @Prop() readonly activeItemCallback?: () => Promise<void>;\n\n /**\n * Callback emitted when the 'cancel' button is pressed\n */\n @Prop() readonly cancelCallback?: () => Promise<void>;\n\n /**\n * Defines which nodes of the component have checkboxes.\n */\n @Prop() readonly checkboxType: CheckboxType;\n\n /**\n * Define if a item node is expanded on click interaction. If false item-node will only be expanded on double click.\n */\n @Prop() readonly expandOnClick: boolean = true;\n\n /**\n * Callback emitted when the items checked items change\n */\n @Prop() readonly checkedChanged?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Callback emitted when the 'select' button is pressed\n */\n @Prop() readonly confirmCallback?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Set of additional actions (callbacks) to those already provided by default by the selector (cancelCallback and selectCallback)\n */\n @Prop() readonly dialogActions: DialogAction[] = [];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Represents the itemLis list model\n */\n @Prop() readonly itemsList: ItemNode[] = [];\n\n @Watch(\"itemsList\")\n watchNodeListHandler(newItemsList: ItemNode[]) {\n if (newItemsList.length > 0) {\n this.loading = false;\n }\n this.#updateViews(newItemsList);\n\n // Check and update activeItem\n this.activeItemNode = findFirstActiveNode(newItemsList);\n }\n\n /**\n * This define if the selection is unique or not\n */\n @Prop() readonly multiSelection?: boolean = false;\n\n /**\n * Callback emitted when the items selection change\n */\n @Prop() readonly selectionChanged?: (selectedItem: string[]) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.#viewItemsAsModel = [\n { value: VIEW_AS_TREE_ID, caption: this.#_componentLocale.main.tree },\n { value: VIEW_AS_LIST_ID, caption: \"List\" }\n ];\n this.watchNodeListHandler(this.itemsList);\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Allow to update the selected items\n */\n @Method()\n async updateSelection(selectedItemsIds: string[]) {\n // first clear selected\n this.#treeViewRenderEl.updateItemsProperties(this.#selectedNodesIds, {\n selected: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(selectedItemsIds, {\n selected: true\n });\n }\n\n #cancelHandler = () => {\n if (this.cancelCallback) {\n this.cancelCallback();\n }\n };\n\n #checkedItemsChangeHandler = async (\n e: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const checkedNodesIds: string[] = [];\n e.detail.forEach(node => {\n node.item.checked && checkedNodesIds.push(node.item.id);\n });\n this.#checkedNodesIds = checkedNodesIds;\n this.#updatedModelList = checkItems(this.itemsList, this.#checkedNodesIds);\n\n if (this.checkedChanged) {\n this.checkedChanged(this.#checkedNodesIds);\n }\n };\n\n #confirmHandler = () => {\n if (this.confirmCallback) {\n this.confirmCallback(this.#checkedNodesIds);\n }\n };\n\n #contextMenuHandler = async (\n e: CustomEvent<{\n id: string;\n itemRef: HTMLChTreeViewItemElement;\n metadata: string;\n contextmenuEvent: PointerEvent;\n }>\n ) => {\n if (this.itemContextMenuCallback) {\n let info: ContextMenuInfo;\n const isSelected = this.#selectedNodesIds.find(id => id === e.detail.id);\n if (!this.#selectedNodesIds.length || !isSelected) {\n await this.#treeViewRenderEl.updateItemsProperties(\n this.#selectedNodesIds,\n { selected: false }\n );\n await this.#treeViewRenderEl.updateItemsProperties([e.detail.id], {\n selected: true\n });\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: [e.detail.id]\n };\n } else {\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: this.#selectedNodesIds\n };\n }\n this.itemContextMenuCallback(info);\n }\n };\n\n #executeDialogAction = (\n callback: (checkedNodesIds: string[], selectedNodesIds: string[]) => void\n ) => {\n return () => {\n callback(this.#checkedNodesIds, this.#selectedNodesIds);\n };\n };\n\n #patternSearchValueChangedHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.searchPatternValue = event.detail.toString();\n };\n\n #renderActionButtons = (): HTMLElement[] => {\n return (\n <div>\n {this.dialogActions.map(action => {\n return (\n <button\n class={\"button-tertiary\"}\n part={`button button-${action.name}`}\n onClick={this.#executeDialogAction(action.callback)}\n disabled={this.loading}\n >\n {action.name}\n </button>\n );\n })}\n </div>\n );\n };\n\n #renderFooter = (): HTMLElement => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between\">\n {this.#renderActionButtons()}\n <div class=\"buttons-spacer \">\n {this.cancelCallback && (\n <button\n class={\"button-secondary\"}\n part={\"cancel-button\"}\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n )}\n {this.confirmCallback && (\n <button\n class={\"button-primary\"}\n part={\"confirm-button\"}\n onClick={this.#confirmHandler}\n disabled={this.loading}\n >\n {this.#_componentLocale.footer.select}\n </button>\n )}\n </div>\n </footer>\n );\n };\n\n #selectedItemsChangeHandler = (\n e: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n const selectedNodesIds: string[] = [];\n unselectAllNodes(this.itemsList);\n e.detail.forEach(node => {\n selectedNodesIds.push(node.item.id);\n });\n this.#selectedNodesIds = selectedNodesIds;\n if (this.selectionChanged) {\n this.selectionChanged(this.#selectedNodesIds);\n }\n\n this.#updatedModelList = selectItems(this.itemsList, selectedNodesIds);\n };\n\n #toggleAndSelectNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsSelected = selectItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(newItemsSelected, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #toggleCheckedNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(this.itemsList, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #updateViews = (newItemsList: ItemNode[]) => {\n this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n\n this.nodeListFlattenedTreeModel =\n convertItemsNodeListToFlattenedTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n };\n\n #viewItemsAsChangedHandler = async (event: CustomEvent<string>) => {\n const selectedViewType = event.detail as NodesVersionsViewType;\n this.nodesVersionsViewType = selectedViewType;\n if (this.nodesVersionsViewType === \"tree\") {\n await this.#toggleAndSelectNodesInModelItems(this.#selectedNodesIds);\n await this.#toggleCheckedNodesInModelItems(this.#checkedNodesIds);\n }\n this.#updateViews(this.#updatedModelList);\n };\n\n #toggleCheckboxesChangedHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n this.toggleCheckboxes = event.detail === TOGGLE_CHECKBOXES_CHECKED_VALUE;\n };\n\n #scrollIntoActiveVersionNode = () => {\n const doScrollIntoView =\n this.#treeViewRenderEl && this.activeItemNode?.path;\n if (doScrollIntoView) {\n this.#treeViewRenderEl.scrollIntoVisible(this.activeItemNode.path);\n }\n\n if (this.activeItemCallback) {\n this.activeItemCallback();\n }\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n <header class=\"header control-header field-group spacing-body-block-start spacing-body-inline\">\n <div class=\"field-group view-mode__toggle-checkboxes\">\n <div class=\"field field-inline field__items-view-type\">\n <label class=\"label\" htmlFor=\"view-mode\">\n Select view mode:\n </label>\n <ch-radio-group-render\n class=\"radio-group\"\n id=\"view-mode\"\n model={this.#viewItemsAsModel}\n onChange={this.#viewItemsAsChangedHandler}\n value={this.#viewItemsAsModel[0].value}\n ></ch-radio-group-render>\n </div>\n\n {this.checkboxType !== \"none\" && (\n <div class=\"field field-inline field__toggle-checkboxes\">\n <label class=\"label\" htmlFor=\"toggle-checkboxes\">\n Toggle Checkboxes\n </label>\n <ch-checkbox\n class=\"checkbox\"\n id=\"toggle-checkboxes\"\n checkedValue={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n value={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n onInput={this.#toggleCheckboxesChangedHandler}\n ></ch-checkbox>\n </div>\n )}\n </div>\n\n <ch-edit\n class=\"input pattern-filter\"\n placeholder={\n this.#_componentLocale.header.searchPatternPlaceholder\n }\n startImgSrc={SYSTEM_SEARCH_ICON}\n onInput={this.#patternSearchValueChangedHandler}\n ></ch-edit>\n {this.activeItemNode && (\n <div class=\"active-item\">\n <span\n class=\"active-item__icon-container\"\n // make this span the icon container, to prevent icon state changes when\n // interacting with div.active-item\n >\n <ch-image\n class=\"icon-md active-item__icon\"\n src={\n this.activeItemNode.iconStart || ACTIVE_ITEM_DEFAULT_ICON\n }\n containerRef={null}\n ></ch-image>\n </span>\n {this.#_componentLocale.header.activeItem}\n <button\n class=\"active-item__link\"\n onClick={this.#scrollIntoActiveVersionNode}\n >\n {this.activeItemNode.caption}\n </button>\n </div>\n )}\n </header>\n\n <div class=\"spacing-body-inline-start trees\">\n {this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n show\n ></gx-ide-loader>\n ) : (\n <ch-tree-view-render\n class=\"tree-view\"\n model={\n this.nodesVersionsViewType === \"tree\"\n ? this.nodeVersionsListTreeModel\n : this.nodeListFlattenedTreeModel\n }\n show-lines={\n this.nodesVersionsViewType === \"tree\" ? \"all\" : \"none\"\n }\n expandableButton={\n this.nodesVersionsViewType === \"tree\" ? \"decorative\" : \"no\"\n }\n onItemContextmenu={this.#contextMenuHandler}\n onCheckedItemsChange={this.#checkedItemsChangeHandler}\n onSelectedItemsChange={this.#selectedItemsChangeHandler}\n expandOnClick={this.expandOnClick}\n multiSelection={this.multiSelection}\n filter={this.searchPatternValue}\n filterType=\"caption\"\n toggleCheckboxes={this.toggleCheckboxes}\n ref={(el: HTMLChTreeViewRenderElement) => {\n this.#treeViewRenderEl = el as HTMLChTreeViewRenderElement;\n }}\n ></ch-tree-view-render>\n )}\n </div>\n {(this.dialogActions.length > 0 ||\n this.cancelCallback ||\n this.confirmCallback) &&\n this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type CheckboxType = \"none\" | \"all\" | \"leaf\" | \"custom\";\n\nexport type DialogAction = {\n name: string;\n callback: DialogActionCallback;\n};\n\nexport type DialogActionCallback = (...args: any[]) => void;\n\nexport type ItemCommon = {\n icon: string;\n expanded: boolean;\n};\n\nexport type ItemNode = {\n active?: boolean;\n checkbox?: boolean;\n checked?: boolean;\n expanded?: boolean;\n iconStart?: string;\n iconEnd?: string;\n id: string;\n name: string;\n nodes?: ItemNode[];\n parts?: string;\n selected?: boolean;\n type: ItemType;\n};\n\nexport type ActiveNode = {\n caption: string;\n iconStart?: string;\n path: string[]; // for using the scrollIntoVisible method of the tree-view-render\n};\n\nexport type ItemType = {\n id: string;\n name: string;\n};\n\ntype NodesVersionsViewType = \"tree\" | \"list\";\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { ItemNode, CheckboxType } from "./select-kb-items";
1
+ import { ItemNode, CheckboxType, ActiveNode } from "./select-kb-items";
2
2
  import { TreeViewItemModel } from "@genexus/chameleon-controls-library";
3
+ export declare const ACTIVE_ITEM_DEFAULT_ICON: `${string}/${string}/${string}${string}`;
3
4
  export declare const convertItemsNodeListToFlattenedTreeViewModel: (itemsList: ItemNode[], checkboxType: CheckboxType) => TreeViewItemModel[];
4
5
  export declare const convertItemsListToTreeViewModel: (itemsList: ItemNode[], checkboxType: CheckboxType) => TreeViewItemModel[];
5
6
  export declare const unselectAllNodes: (itemsList: ItemNode[]) => void;
@@ -7,3 +8,9 @@ export declare const checkItems: (itemsList: ItemNode[], idsChecked: string[]) =
7
8
  export declare const expandItems: (itemsList: ItemNode[], idsChecked: string[]) => ItemNode[];
8
9
  export declare const selectItems: (itemsList: ItemNode[], idsSelected: string[]) => ItemNode[];
9
10
  export declare const searchParentsItems: (items: ItemNode[], ids: string[]) => string[] | null;
11
+ /**
12
+ * Recursively searches for the first node with the active=true property
13
+ * @param nodes Array of nodes to search through
14
+ * @returns An object with caption, iconStart, and path to the first active node found, or null if none is found
15
+ */
16
+ export declare const findFirstActiveNode: (nodes: ItemNode[]) => ActiveNode | null;