@genexus/genexus-ide-ui 1.1.6 → 1.1.7

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 (95) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-design-import.cjs.entry.js +1 -1
  3. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-new-version.cjs.entry.js +58 -14
  5. package/dist/cjs/gx-ide-new-version.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +16 -9
  7. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +2 -2
  9. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +270 -0
  11. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -0
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/collection/collection-manifest.json +1 -0
  14. package/dist/collection/components/design-import/design-import.js +1 -1
  15. package/dist/collection/components/design-import/design-import.js.map +1 -1
  16. package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.en.json +3 -1
  17. package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.ja.json +3 -1
  18. package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.zh.json +3 -1
  19. package/dist/collection/components/new-version/new-version.css +4 -0
  20. package/dist/collection/components/new-version/new-version.js +124 -18
  21. package/dist/collection/components/new-version/new-version.js.map +1 -1
  22. package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.en.json +2 -1
  23. package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.ja.json +1 -0
  24. package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.zh.json +1 -0
  25. package/dist/collection/components/select-kb-items/select-kb-items.css +22 -27
  26. package/dist/collection/components/select-kb-items/select-kb-items.js +34 -8
  27. package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
  28. package/dist/collection/components/team-dev/commit/commit.js +2 -2
  29. package/dist/collection/components/team-dev/commit/commit.js.map +1 -1
  30. package/dist/collection/components/team-dev/history/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.en.json +42 -0
  31. package/dist/collection/components/team-dev/history/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.ja.json +42 -0
  32. package/dist/collection/components/team-dev/history/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.zh.json +42 -0
  33. package/dist/collection/components/team-dev/history/helpers.js +22 -0
  34. package/dist/collection/components/team-dev/history/helpers.js.map +1 -0
  35. package/dist/collection/components/team-dev/history/history.css +124 -0
  36. package/dist/collection/components/team-dev/history/history.js +448 -0
  37. package/dist/collection/components/team-dev/history/history.js.map +1 -0
  38. package/dist/collection/testing/locale.e2e.js +1 -0
  39. package/dist/collection/testing/locale.e2e.js.map +1 -1
  40. package/dist/components/gx-ide-design-import.js +1 -1
  41. package/dist/components/gx-ide-design-import.js.map +1 -1
  42. package/dist/components/gx-ide-new-version.js +65 -15
  43. package/dist/components/gx-ide-new-version.js.map +1 -1
  44. package/dist/components/gx-ide-select-kb-items.js +1 -507
  45. package/dist/components/gx-ide-select-kb-items.js.map +1 -1
  46. package/dist/components/gx-ide-team-dev-commit.js +2 -2
  47. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  48. package/dist/components/gx-ide-team-dev-history.d.ts +11 -0
  49. package/dist/components/gx-ide-team-dev-history.js +322 -0
  50. package/dist/components/gx-ide-team-dev-history.js.map +1 -0
  51. package/dist/components/select-kb-items.js +520 -0
  52. package/dist/components/select-kb-items.js.map +1 -0
  53. package/dist/esm/genexus-ide-ui.js +1 -1
  54. package/dist/esm/gx-ide-design-import.entry.js +1 -1
  55. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  56. package/dist/esm/gx-ide-new-version.entry.js +58 -14
  57. package/dist/esm/gx-ide-new-version.entry.js.map +1 -1
  58. package/dist/esm/gx-ide-select-kb-items.entry.js +16 -9
  59. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  60. package/dist/esm/gx-ide-team-dev-commit.entry.js +2 -2
  61. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  62. package/dist/esm/gx-ide-team-dev-history.entry.js +266 -0
  63. package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -0
  64. package/dist/esm/loader.js +1 -1
  65. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  66. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  67. package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.en.json +3 -1
  68. package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.ja.json +3 -1
  69. package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.zh.json +3 -1
  70. package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.en.json +2 -1
  71. package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.ja.json +1 -0
  72. package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.zh.json +1 -0
  73. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.en.json +42 -0
  74. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.ja.json +42 -0
  75. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.zh.json +42 -0
  76. package/dist/genexus-ide-ui/{p-48062d23.entry.js → p-0acf517c.entry.js} +2 -2
  77. package/dist/genexus-ide-ui/{p-48062d23.entry.js.map → p-0acf517c.entry.js.map} +1 -1
  78. package/dist/genexus-ide-ui/{p-d2107cb2.entry.js → p-34fd4875.entry.js} +3 -18
  79. package/dist/genexus-ide-ui/p-34fd4875.entry.js.map +1 -0
  80. package/dist/genexus-ide-ui/p-74715731.entry.js +541 -0
  81. package/dist/genexus-ide-ui/p-74715731.entry.js.map +1 -0
  82. package/dist/genexus-ide-ui/p-80c1ddc3.entry.js +218 -0
  83. package/dist/genexus-ide-ui/p-80c1ddc3.entry.js.map +1 -0
  84. package/dist/genexus-ide-ui/{p-9fa1200f.entry.js → p-a8d0b62e.entry.js} +139 -125
  85. package/dist/genexus-ide-ui/p-a8d0b62e.entry.js.map +1 -0
  86. package/dist/types/components/new-version/new-version.d.ts +27 -1
  87. package/dist/types/components/select-kb-items/select-kb-items.d.ts +8 -0
  88. package/dist/types/components/team-dev/history/helpers.d.ts +7 -0
  89. package/dist/types/components/team-dev/history/history.d.ts +109 -0
  90. package/dist/types/components.d.ts +141 -18
  91. package/package.json +1 -1
  92. package/dist/genexus-ide-ui/p-9fa1200f.entry.js.map +0 -1
  93. package/dist/genexus-ide-ui/p-c91af626.entry.js +0 -149
  94. package/dist/genexus-ide-ui/p-c91af626.entry.js.map +0 -1
  95. package/dist/genexus-ide-ui/p-d2107cb2.entry.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { r as t, g as e, h as i, H as s, a as n } from "./p-25a9f1d7.js";
1
+ import { r as t, g as e, h as s, H as i, a as n } from "./p-25a9f1d7.js";
2
2
 
3
3
  import { g as o } from "./p-ede7bd20.js";
4
4
 
@@ -11,16 +11,16 @@ const r = o({
11
11
  });
12
12
 
13
13
  const convertItemsNodeListToFlattenedTreeViewModel = (t, e) => {
14
- const i = [];
14
+ const s = [];
15
15
  const processNode = t => {
16
- var s;
16
+ var i;
17
17
  const n = t.active && !t.iconStart ? r : t.iconStart;
18
- const o = !((s = t.nodes) === null || s === void 0 ? void 0 : s.length);
18
+ const o = !((i = t.nodes) === null || i === void 0 ? void 0 : i.length);
19
19
  const a = e === "all" || e === "custom" && t.checkbox || e === "leaf" && o;
20
20
  const c = JSON.stringify({
21
21
  versionType: t.type
22
22
  });
23
- i.push({
23
+ s.push({
24
24
  caption: t.name,
25
25
  checkbox: a,
26
26
  checked: t.checked,
@@ -39,15 +39,15 @@ const convertItemsNodeListToFlattenedTreeViewModel = (t, e) => {
39
39
  }
40
40
  };
41
41
  t.forEach((t => processNode(t)));
42
- return i;
42
+ return s;
43
43
  };
44
44
 
45
45
  const convertItemsListToTreeViewModel = (t, e) => {
46
- const i = [];
46
+ const s = [];
47
47
  t.forEach((t => {
48
- var s;
48
+ var i;
49
49
  const n = t.active && !t.iconStart ? r : t.iconStart;
50
- const o = !((s = t.nodes) === null || s === void 0 ? void 0 : s.length);
50
+ const o = !((i = t.nodes) === null || i === void 0 ? void 0 : i.length);
51
51
  const a = e === "all" || e === "custom" && t.checkbox || e === "leaf" && o;
52
52
  const c = t.expanded;
53
53
  const h = n;
@@ -56,7 +56,7 @@ const convertItemsListToTreeViewModel = (t, e) => {
56
56
  versionType: t.type
57
57
  });
58
58
  const f = parseInt(t.id);
59
- i.push({
59
+ s.push({
60
60
  caption: t.name,
61
61
  checkbox: a,
62
62
  checked: t.checked,
@@ -72,7 +72,7 @@ const convertItemsListToTreeViewModel = (t, e) => {
72
72
  selected: t.selected
73
73
  });
74
74
  }));
75
- return i;
75
+ return s;
76
76
  };
77
77
 
78
78
  const findItemNode = (t, e) => {
@@ -80,8 +80,8 @@ const findItemNode = (t, e) => {
80
80
  return e;
81
81
  }
82
82
  if (e.nodes) {
83
- for (const i of e.nodes) {
84
- const e = findItemNode(t, i);
83
+ for (const s of e.nodes) {
84
+ const e = findItemNode(t, s);
85
85
  if (e) {
86
86
  return e;
87
87
  }
@@ -91,8 +91,8 @@ const findItemNode = (t, e) => {
91
91
  };
92
92
 
93
93
  function findItemInArray(t, e) {
94
- for (const i of t) {
95
- const t = findItemNode(e, i);
94
+ for (const s of t) {
95
+ const t = findItemNode(e, s);
96
96
  if (t) {
97
97
  return t;
98
98
  }
@@ -126,9 +126,9 @@ const unselectAllNodes = t => {
126
126
  const checkItems = (t, e) => {
127
127
  setAllLeafsCheckedFalse(t);
128
128
  e.forEach((e => {
129
- const i = findItemInArray(t, e);
130
- if (i) {
131
- i.checked = true;
129
+ const s = findItemInArray(t, e);
130
+ if (s) {
131
+ s.checked = true;
132
132
  }
133
133
  }));
134
134
  return t;
@@ -136,9 +136,9 @@ const checkItems = (t, e) => {
136
136
 
137
137
  const expandItems = (t, e) => {
138
138
  e.forEach((e => {
139
- const i = findItemInArray(t, e);
140
- if (i) {
141
- i.expanded = true;
139
+ const s = findItemInArray(t, e);
140
+ if (s) {
141
+ s.expanded = true;
142
142
  }
143
143
  }));
144
144
  return t;
@@ -146,27 +146,27 @@ const expandItems = (t, e) => {
146
146
 
147
147
  const selectItems = (t, e) => {
148
148
  e.forEach((e => {
149
- const i = findItemInArray(t, e);
150
- if (i) {
151
- i.selected = true;
149
+ const s = findItemInArray(t, e);
150
+ if (s) {
151
+ s.selected = true;
152
152
  }
153
153
  }));
154
154
  return t;
155
155
  };
156
156
 
157
157
  function searchInNode(t, e) {
158
- var i;
158
+ var s;
159
159
  // If the current node is the searched node, we return an empty list (it has no parents in this branch)
160
160
  if (t.id === e) {
161
161
  return [];
162
162
  }
163
163
  // We traverse each child looking for the target node
164
- if ((i = t.nodes) === null || i === void 0 ? void 0 : i.length) {
165
- for (const i of t.nodes) {
166
- const s = searchInNode(i, e);
167
- if (s !== null) {
164
+ if ((s = t.nodes) === null || s === void 0 ? void 0 : s.length) {
165
+ for (const s of t.nodes) {
166
+ const i = searchInNode(s, e);
167
+ if (i !== null) {
168
168
  // If we find it, we include the current node at the beginning of the path and return
169
- return [ t.id, ...s ];
169
+ return [ t.id, ...i ];
170
170
  }
171
171
  }
172
172
  }
@@ -174,18 +174,18 @@ function searchInNode(t, e) {
174
174
  }
175
175
 
176
176
  const searchParentsItems = (t, e) => {
177
- const i = [];
178
- for (const s of e) {
177
+ const s = [];
178
+ for (const i of e) {
179
179
  for (const e of t) {
180
- const t = searchInNode(e, s);
180
+ const t = searchInNode(e, i);
181
181
  if (t !== null) {
182
182
  t.forEach((t => {
183
- i.push(t);
183
+ s.push(t);
184
184
  }));
185
185
  }
186
186
  }
187
187
  }
188
- return i;
188
+ return s;
189
189
  };
190
190
 
191
191
  /**
@@ -200,20 +200,20 @@ const searchParentsItems = (t, e) => {
200
200
  return null;
201
201
  }
202
202
  // Iterate through each node in the array
203
- for (const i of t) {
203
+ for (const s of t) {
204
204
  // Create a new path that includes the current node
205
- const t = [ ...e, i.id ];
205
+ const t = [ ...e, s.id ];
206
206
  // Check if the current node is active
207
- if (i.active === true) {
207
+ if (s.active === true) {
208
208
  return {
209
- caption: i.name,
210
- iconStart: i.iconStart,
209
+ caption: s.name,
210
+ iconStart: s.iconStart,
211
211
  path: t
212
212
  };
213
213
  }
214
214
  // If the node has children, search through them with the updated path
215
- if (i.nodes && i.nodes.length > 0) {
216
- const e = findActiveWithPath(i.nodes, t);
215
+ if (s.nodes && s.nodes.length > 0) {
216
+ const e = findActiveWithPath(s.nodes, t);
217
217
  // If we find an active node in this subtree, return it immediately
218
218
  if (e !== null) {
219
219
  return e;
@@ -227,26 +227,26 @@ const searchParentsItems = (t, e) => {
227
227
  return findActiveWithPath(t);
228
228
  };
229
229
 
230
- 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}';
230
+ const c = ":host{--search-input-max-inline-size:400px;display:grid;block-size:100%}:host(:not(.has-footer)){grid-template-rows:max-content 1fr}:host(.has-footer){grid-template-rows:max-content 1fr max-content}.header.has-active-item{grid-area:header}.section{display:contents}.header__first-row,.header__second-row{display:grid;grid-auto-flow:column}.header__first-row{column-gap:var(--field-group__column-gap);grid-auto-columns:max-content}.header__second-row{column-gap:12px;grid-template-columns:minmax(150px, var(--search-input-max-inline-size)) max-content}.header__second-row--one-row{grid-template-columns:minmax(150px, var(--search-input-max-inline-size))}.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)}.dummy-control-block-size{block-size:32px}.trees{position:relative}";
231
231
 
232
- var h = undefined && undefined.__classPrivateFieldSet || function(t, e, i, s, n) {
233
- if (s === "m") throw new TypeError("Private method is not writable");
234
- if (s === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
232
+ var h = undefined && undefined.__classPrivateFieldSet || function(t, e, s, i, n) {
233
+ if (i === "m") throw new TypeError("Private method is not writable");
234
+ if (i === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
235
235
  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");
236
- return s === "a" ? n.call(t, i) : n ? n.value = i : e.set(t, i), i;
236
+ return i === "a" ? n.call(t, s) : n ? n.value = s : e.set(t, s), s;
237
237
  };
238
238
 
239
- var l = undefined && undefined.__classPrivateFieldGet || function(t, e, i, s) {
240
- if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
241
- 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");
242
- return i === "m" ? s : i === "a" ? s.call(t) : s ? s.value : e.get(t);
239
+ var l = undefined && undefined.__classPrivateFieldGet || function(t, e, s, i) {
240
+ if (s === "a" && !i) throw new TypeError("Private accessor was defined without a getter");
241
+ if (typeof e === "function" ? t !== e || !i : !e.has(t)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
242
+ return s === "m" ? i : s === "a" ? i.call(t) : i ? i.value : e.get(t);
243
243
  };
244
244
 
245
- var d, f, u, p, m, v, g, w, b, k, y, _, x, W, M, I, C, S, T, N, j, L, E;
245
+ var d, f, u, p, m, v, w, g, b, k, y, _, x, W, M, I, C, S, T, z, N, j, L;
246
246
 
247
- const A = [ "resets/box-sizing", "chameleon/scrollbar", "components/tooltip", "components/tree-view", "utils/form--full", "utils/layout", "utils/spacing", "utils/typography" ];
247
+ const E = [ "resets/box-sizing", "chameleon/scrollbar", "components/tooltip", "components/tree-view", "utils/form--full", "utils/layout", "utils/spacing", "utils/typography" ];
248
248
 
249
- const z = o({
249
+ const A = o({
250
250
  category: "system",
251
251
  name: "search",
252
252
  colorType: "on-surface"
@@ -259,16 +259,16 @@ const O = "list";
259
259
  const P = "on";
260
260
 
261
261
  const F = class {
262
- constructor(s) {
263
- t(this, s);
262
+ constructor(i) {
263
+ t(this, i);
264
264
  d.set(this, void 0);
265
265
  f.set(this, []);
266
266
  u.set(this, void 0);
267
267
  p.set(this, []);
268
268
  m.set(this, e(`./gx-ide-assets/select-kb-items/shortcuts.json`));
269
269
  v.set(this, []);
270
- g.set(this, void 0);
271
270
  w.set(this, void 0);
271
+ g.set(this, void 0);
272
272
  b.set(this, (() => {
273
273
  if (this.cancelCallback) {
274
274
  this.cancelCallback();
@@ -293,12 +293,12 @@ const F = class {
293
293
  _.set(this, (async t => {
294
294
  if (this.itemContextMenuCallback) {
295
295
  let e;
296
- const i = l(this, p, "f").find((e => e === t.detail.id));
297
- if (!l(this, p, "f").length || !i) {
298
- await l(this, w, "f").updateItemsProperties(l(this, p, "f"), {
296
+ const s = l(this, p, "f").find((e => e === t.detail.id));
297
+ if (!l(this, p, "f").length || !s) {
298
+ await l(this, g, "f").updateItemsProperties(l(this, p, "f"), {
299
299
  selected: false
300
300
  });
301
- await l(this, w, "f").updateItemsProperties([ t.detail.id ], {
301
+ await l(this, g, "f").updateItemsProperties([ t.detail.id ], {
302
302
  selected: true
303
303
  });
304
304
  e = {
@@ -322,21 +322,21 @@ const F = class {
322
322
  W.set(this, (t => {
323
323
  this.searchPatternValue = t.detail.toString();
324
324
  }));
325
- M.set(this, (() => i("div", null, this.dialogActions.map((t => i("button", {
325
+ M.set(this, (() => s("div", null, this.dialogActions.map((t => s("button", {
326
326
  class: "button-tertiary",
327
327
  part: `button button-${t.name}`,
328
328
  onClick: l(this, x, "f").call(this, t.callback),
329
329
  disabled: this.loading
330
330
  }, t.name))))));
331
- I.set(this, (() => i("footer", {
331
+ I.set(this, (() => s("footer", {
332
332
  class: "footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between"
333
- }, l(this, M, "f").call(this), i("div", {
333
+ }, l(this, M, "f").call(this), s("div", {
334
334
  class: "buttons-spacer "
335
- }, this.cancelCallback && i("button", {
335
+ }, this.cancelCallback && s("button", {
336
336
  class: "button-secondary",
337
337
  part: "cancel-button",
338
338
  onClick: l(this, b, "f")
339
- }, l(this, d, "f").footer.cancel), this.confirmCallback && i("button", {
339
+ }, l(this, d, "f").footer.cancel), this.confirmCallback && s("button", {
340
340
  class: "button-primary",
341
341
  part: "confirm-button",
342
342
  onClick: l(this, y, "f"),
@@ -356,42 +356,43 @@ const F = class {
356
356
  }));
357
357
  S.set(this, (async t => {
358
358
  const e = searchParentsItems(this.itemsList, t);
359
- const i = selectItems(this.itemsList, t);
360
- const s = expandItems(i, e);
361
- l(this, N, "f").call(this, s);
359
+ const s = selectItems(this.itemsList, t);
360
+ const i = expandItems(s, e);
361
+ l(this, z, "f").call(this, i);
362
362
  }));
363
363
  T.set(this, (async t => {
364
364
  const e = searchParentsItems(this.itemsList, t);
365
- const i = expandItems(this.itemsList, e);
366
- l(this, N, "f").call(this, i);
365
+ const s = expandItems(this.itemsList, e);
366
+ l(this, z, "f").call(this, s);
367
367
  }));
368
- N.set(this, (t => {
368
+ z.set(this, (t => {
369
369
  this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(t, this.checkboxType);
370
370
  this.nodeListFlattenedTreeModel = convertItemsNodeListToFlattenedTreeViewModel(t, this.checkboxType);
371
371
  }));
372
- j.set(this, (async t => {
372
+ N.set(this, (async t => {
373
373
  const e = t.detail;
374
374
  this.nodesVersionsViewType = e;
375
375
  if (this.nodesVersionsViewType === "tree") {
376
376
  await l(this, S, "f").call(this, l(this, p, "f"));
377
377
  await l(this, T, "f").call(this, l(this, f, "f"));
378
378
  }
379
- l(this, N, "f").call(this, l(this, v, "f"));
379
+ l(this, z, "f").call(this, l(this, v, "f"));
380
380
  }));
381
- L.set(this, (t => {
381
+ j.set(this, (t => {
382
382
  this.toggleCheckboxes = t.detail === P;
383
383
  }));
384
- E.set(this, (() => {
384
+ L.set(this, (() => {
385
385
  var t;
386
- const e = l(this, w, "f") && ((t = this.activeItemNode) === null || t === void 0 ? void 0 : t.path);
386
+ const e = l(this, g, "f") && ((t = this.activeItemNode) === null || t === void 0 ? void 0 : t.path);
387
387
  if (e) {
388
- l(this, w, "f").scrollIntoVisible(this.activeItemNode.path);
388
+ l(this, g, "f").scrollIntoVisible(this.activeItemNode.path);
389
389
  }
390
390
  if (this.activeItemCallback) {
391
391
  this.activeItemCallback();
392
392
  }
393
393
  }));
394
394
  this.activeItemNode = undefined;
395
+ this.renderFooter = false;
395
396
  this.nodeListFlattenedTreeModel = [];
396
397
  this.loading = true;
397
398
  this.nodesVersionsViewType = "tree";
@@ -408,19 +409,20 @@ const F = class {
408
409
  this.itemContextMenuCallback = undefined;
409
410
  this.itemsList = [];
410
411
  this.multiSelection = false;
412
+ this.showActiveItemLink = false;
411
413
  this.selectionChanged = undefined;
412
414
  }
413
415
  watchNodeListHandler(t) {
416
+ l(this, z, "f").call(this, t);
417
+ // Check and update activeItem
418
+ this.activeItemNode = findFirstActiveNode(t);
414
419
  if (t.length > 0) {
415
420
  this.loading = false;
416
421
  }
417
- l(this, N, "f").call(this, t);
418
- // Check and update activeItem
419
- this.activeItemNode = findFirstActiveNode(t);
420
422
  }
421
423
  async componentWillLoad() {
422
424
  h(this, d, await a.getComponentStrings(this.el), "f");
423
- h(this, g, [ {
425
+ h(this, w, [ {
424
426
  value: H,
425
427
  caption: l(this, d, "f").main.tree
426
428
  }, {
@@ -428,6 +430,7 @@ const F = class {
428
430
  caption: "List"
429
431
  } ], "f");
430
432
  this.watchNodeListHandler(this.itemsList);
433
+ this.renderFooter = this.dialogActions.length > 0 || !!this.cancelCallback || !!this.confirmCallback;
431
434
  }
432
435
  /**
433
436
  * Suspends or reactivates the shortcuts
@@ -442,72 +445,83 @@ const F = class {
442
445
  * Allow to update the selected items
443
446
  */ async updateSelection(t) {
444
447
  // first clear selected
445
- l(this, w, "f").updateItemsProperties(l(this, p, "f"), {
448
+ l(this, g, "f").updateItemsProperties(l(this, p, "f"), {
446
449
  selected: false
447
450
  });
448
451
  // then select
449
- l(this, w, "f").updateItemsProperties(t, {
452
+ l(this, g, "f").updateItemsProperties(t, {
450
453
  selected: true
451
454
  });
452
455
  }
453
456
  render() {
454
- return i(s, {
455
- class: "widget"
456
- }, i("ch-theme", {
457
- model: A
458
- }), i("ch-shortcuts", {
457
+ return s(i, {
458
+ class: {
459
+ widget: true,
460
+ "has-footer": this.renderFooter
461
+ }
462
+ }, s("ch-theme", {
463
+ model: E
464
+ }), s("ch-shortcuts", {
459
465
  src: l(this, m, "f"),
460
466
  ref: t => h(this, u, t, "f")
461
- }), i("section", {
467
+ }), s("section", {
462
468
  class: "section"
463
- }, i("header", {
469
+ }, s("header", {
470
+ part: "header",
464
471
  class: "header control-header field-group spacing-body-block-start spacing-body-inline"
465
- }, i("div", {
466
- class: "field-group view-mode__toggle-checkboxes"
467
- }, i("div", {
468
- class: "field field-inline field__items-view-type"
469
- }, i("label", {
472
+ }, s("div", {
473
+ class: "header__first-row"
474
+ }, s("div", {
475
+ class: "field field-inline"
476
+ }, s("label", {
470
477
  class: "label",
471
478
  htmlFor: "view-mode"
472
- }, "Select view mode:"), i("ch-radio-group-render", {
473
- class: "radio-group",
479
+ }, "Select view mode:"), s("ch-radio-group-render", {
480
+ class: "radio-group dummy-control-block-size",
474
481
  id: "view-mode",
475
- model: l(this, g, "f"),
476
- onChange: l(this, j, "f"),
477
- value: l(this, g, "f")[0].value
478
- })), this.checkboxType !== "none" && i("div", {
479
- class: "field field-inline field__toggle-checkboxes"
480
- }, i("label", {
482
+ model: l(this, w, "f"),
483
+ onChange: l(this, N, "f"),
484
+ value: l(this, w, "f")[0].value
485
+ })), this.checkboxType !== "none" && s("div", {
486
+ class: "field field-inline"
487
+ }, s("label", {
481
488
  class: "label",
482
489
  htmlFor: "toggle-checkboxes"
483
- }, "Toggle Checkboxes"), i("ch-checkbox", {
484
- class: "checkbox",
490
+ }, "Toggle Checkboxes"), s("ch-checkbox", {
491
+ class: "checkbox dummy-control-block-size",
485
492
  id: "toggle-checkboxes",
486
493
  checkedValue: P,
487
494
  value: P,
488
- onInput: l(this, L, "f")
489
- }))), i("ch-edit", {
490
- class: "input pattern-filter",
495
+ onInput: l(this, j, "f")
496
+ }))), s("div", {
497
+ class: {
498
+ "header__second-row": true,
499
+ "header__second-row--one-row": !this.showActiveItemLink
500
+ }
501
+ }, s("ch-edit", {
502
+ class: "input",
491
503
  placeholder: l(this, d, "f").header.searchPatternPlaceholder,
492
- startImgSrc: z,
493
- onInput: l(this, W, "f")
494
- }), this.activeItemNode && i("div", {
504
+ startImgSrc: A,
505
+ onInput: l(this, W, "f"),
506
+ accessibleName: "search pattern"
507
+ }), this.activeItemNode && this.showActiveItemLink && s("div", {
495
508
  class: "active-item"
496
- }, i("span", {
509
+ }, s("span", {
497
510
  class: "active-item__icon-container"
498
- }, i("ch-image", {
511
+ }, s("ch-image", {
499
512
  class: "icon-md active-item__icon",
500
513
  src: this.activeItemNode.iconStart || r,
501
514
  containerRef: null
502
- })), l(this, d, "f").header.activeItem, i("button", {
515
+ })), l(this, d, "f").header.activeItem, s("button", {
503
516
  class: "active-item__link",
504
- onClick: l(this, E, "f")
505
- }, this.activeItemNode.caption))), i("div", {
517
+ onClick: l(this, L, "f")
518
+ }, this.activeItemNode.caption)))), s("div", {
506
519
  class: "spacing-body-inline-start trees"
507
- }, this.loading ? i("gx-ide-loader", {
520
+ }, this.loading ? s("gx-ide-loader", {
508
521
  loaderTitle: l(this, d, "f").loader.title,
522
+ description: l(this, d, "f").loader.description,
509
523
  show: true
510
- }) : i("ch-tree-view-render", {
524
+ }) : s("ch-tree-view-render", {
511
525
  class: "tree-view",
512
526
  model: this.nodesVersionsViewType === "tree" ? this.nodeVersionsListTreeModel : this.nodeListFlattenedTreeModel,
513
527
  "show-lines": this.nodesVersionsViewType === "tree" ? "all" : "none",
@@ -521,9 +535,9 @@ const F = class {
521
535
  filterType: "caption",
522
536
  toggleCheckboxes: this.toggleCheckboxes,
523
537
  ref: t => {
524
- h(this, w, t, "f");
538
+ h(this, g, t, "f");
525
539
  }
526
- })), (this.dialogActions.length > 0 || this.cancelCallback || this.confirmCallback) && l(this, I, "f").call(this)));
540
+ })), this.renderFooter && l(this, I, "f").call(this)));
527
541
  }
528
542
  static get assetsDirs() {
529
543
  return [ "gx-ide-assets/select-kb-items" ];
@@ -539,12 +553,12 @@ const F = class {
539
553
  };
540
554
 
541
555
  d = new WeakMap, f = new WeakMap, u = new WeakMap, p = new WeakMap, m = new WeakMap,
542
- v = new WeakMap, g = new WeakMap, w = new WeakMap, b = new WeakMap, k = new WeakMap,
556
+ v = new WeakMap, w = new WeakMap, g = new WeakMap, b = new WeakMap, k = new WeakMap,
543
557
  y = new WeakMap, _ = new WeakMap, x = new WeakMap, W = new WeakMap, M = new WeakMap,
544
- I = new WeakMap, C = new WeakMap, S = new WeakMap, T = new WeakMap, N = new WeakMap,
545
- j = new WeakMap, L = new WeakMap, E = new WeakMap;
558
+ I = new WeakMap, C = new WeakMap, S = new WeakMap, T = new WeakMap, z = new WeakMap,
559
+ N = new WeakMap, j = new WeakMap, L = new WeakMap;
546
560
 
547
561
  F.style = c;
548
562
 
549
563
  export { F as gx_ide_select_kb_items };
550
- //# sourceMappingURL=p-9fa1200f.entry.js.map
564
+ //# sourceMappingURL=p-a8d0b62e.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","renderFooter","suspendShortcuts","suspend","updateSelection","render","Host","widget","model","src","ref","htmlFor","onChange","checkedValue","onInput","showActiveItemLink","placeholder","header","searchPatternPlaceholder","accessibleName","containerRef","activeItem","loaderTitle","loader","title","description","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 --search-input-max-inline-size: 400px;\n display: grid;\n block-size: 100%;\n}\n:host(:not(.has-footer)) {\n grid-template-rows: max-content 1fr;\n}\n:host(.has-footer) {\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 &__first-row,\n &__second-row {\n display: grid;\n grid-auto-flow: column;\n }\n &__first-row {\n column-gap: var(--field-group__column-gap);\n grid-auto-columns: max-content;\n }\n &__second-row {\n column-gap: 12px;\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size)) max-content;\n\n &--one-row {\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size));\n }\n }\n}\n\n.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.dummy-control-block-size {\n // WA: Make as tall as a regular contorl (ie.: a input, a combo-box) in order to\n // make the label vertically aligned with this control.\n block-size: 32px;\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 * If true, the footer will be rendered\n */\n @State() renderFooter: boolean = false;\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 this.#updateViews(newItemsList);\n // Check and update activeItem\n this.activeItemNode = findFirstActiveNode(newItemsList);\n\n if (newItemsList.length > 0) {\n this.loading = false;\n }\n }\n\n /**\n * This define if the selection is unique or not\n */\n @Prop() readonly multiSelection?: boolean = false;\n\n /**\n * Used to define if the component must show the \"Active item\" link or not\n */\n @Prop() readonly showActiveItemLink?: 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 this.renderFooter =\n this.dialogActions.length > 0 ||\n !!this.cancelCallback ||\n !!this.confirmCallback;\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\": true, \"has-footer\": this.renderFooter }}>\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\n part=\"header\"\n class=\"header control-header field-group spacing-body-block-start spacing-body-inline\"\n >\n <div class=\"header__first-row\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"view-mode\">\n Select view mode:\n </label>\n <ch-radio-group-render\n class=\"radio-group dummy-control-block-size\"\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\">\n <label class=\"label\" htmlFor=\"toggle-checkboxes\">\n Toggle Checkboxes\n </label>\n <ch-checkbox\n class=\"checkbox dummy-control-block-size\"\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 <div\n class={{\n \"header__second-row\": true,\n \"header__second-row--one-row\": !this.showActiveItemLink\n }}\n >\n <ch-edit\n class=\"input\"\n placeholder={\n this.#_componentLocale.header.searchPatternPlaceholder\n }\n startImgSrc={SYSTEM_SEARCH_ICON}\n onInput={this.#patternSearchValueChangedHandler}\n accessibleName=\"search pattern\"\n ></ch-edit>\n {this.activeItemNode && this.showActiveItemLink && (\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 ||\n 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 </div>\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 description={this.#_componentLocale.loader.description}\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.renderFooter && 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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"}