@genexus/genexus-ide-ui 1.1.66 → 1.1.68

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 (47) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +27 -12
  3. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-team-dev-preview.cjs.entry.js +34 -20
  5. package/dist/cjs/gx-ide-team-dev-preview.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +27 -12
  7. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/collection/components/team-dev/preview/team-dev-preview.css +15 -0
  10. package/dist/collection/components/team-dev/preview/team-dev-preview.js +56 -20
  11. package/dist/collection/components/team-dev/preview/team-dev-preview.js.map +1 -1
  12. package/dist/collection/components/team-dev/update/update.js +49 -12
  13. package/dist/collection/components/team-dev/update/update.js.map +1 -1
  14. package/dist/collection/components/team-dev/version-control/commit/commit.js +50 -13
  15. package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
  16. package/dist/collection/components/team-dev/version-control/common/types.js.map +1 -1
  17. package/dist/components/gx-ide-team-dev-commit.js +30 -13
  18. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  19. package/dist/components/gx-ide-team-dev-preview.js +37 -21
  20. package/dist/components/gx-ide-team-dev-preview.js.map +1 -1
  21. package/dist/components/gx-ide-team-dev-update.js +30 -13
  22. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  23. package/dist/esm/genexus-ide-ui.js +1 -1
  24. package/dist/esm/gx-ide-team-dev-commit.entry.js +27 -12
  25. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  26. package/dist/esm/gx-ide-team-dev-preview.entry.js +34 -20
  27. package/dist/esm/gx-ide-team-dev-preview.entry.js.map +1 -1
  28. package/dist/esm/gx-ide-team-dev-update.entry.js +27 -12
  29. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  30. package/dist/esm/loader.js +1 -1
  31. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  32. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  33. package/dist/genexus-ide-ui/{p-ab8aee7d.entry.js → p-1890d374.entry.js} +209 -181
  34. package/dist/genexus-ide-ui/p-1890d374.entry.js.map +1 -0
  35. package/dist/genexus-ide-ui/{p-73c3f9ec.entry.js → p-6ee5d68e.entry.js} +30 -19
  36. package/dist/genexus-ide-ui/p-6ee5d68e.entry.js.map +1 -0
  37. package/dist/genexus-ide-ui/{p-3d71b287.entry.js → p-972dc777.entry.js} +50 -38
  38. package/dist/genexus-ide-ui/p-972dc777.entry.js.map +1 -0
  39. package/dist/types/components/team-dev/preview/team-dev-preview.d.ts +8 -0
  40. package/dist/types/components/team-dev/update/update.d.ts +8 -0
  41. package/dist/types/components/team-dev/version-control/commit/commit.d.ts +8 -0
  42. package/dist/types/components/team-dev/version-control/common/types.d.ts +1 -0
  43. package/dist/types/components.d.ts +12 -0
  44. package/package.json +1 -1
  45. package/dist/genexus-ide-ui/p-3d71b287.entry.js.map +0 -1
  46. package/dist/genexus-ide-ui/p-73c3f9ec.entry.js.map +0 -1
  47. package/dist/genexus-ide-ui/p-ab8aee7d.entry.js.map +0 -1
@@ -47,7 +47,7 @@ var f = undefined && undefined.__classPrivateFieldSet || function(e, t, n, i, a)
47
47
  return i === "a" ? a.call(e, n) : a ? a.value = n : t.set(e, n), n;
48
48
  };
49
49
 
50
- var m, b, _, v, w, y, k, x, M, z, C, j, S, W, I, T, N, O, E, U, A, L, P, R, $, D;
50
+ var m, b, _, w, v, y, k, x, M, z, C, j, S, W, I, T, N, O, U, E, A, L, P, R, $, D;
51
51
 
52
52
  const F = [ "resets/box-sizing", "components/tabular-grid", "utils/form--full", "utils/layout", "utils/typography", "utils/spacing", "chameleon/scrollbar" ];
53
53
 
@@ -132,15 +132,14 @@ const ne = class {
132
132
  * It should be ignored if the grid checkboxes state is changed programmatically, by
133
133
  * setting markRow to false once the object has been successfully updated, for example.
134
134
  */ _.set(this, true);
135
- v.set(this, void 0);
136
- w.set(this, (async () => {
135
+ w.set(this, void 0);
136
+ v.set(this, (async () => {
137
137
  g(this, k, "f").call(this, [ ...this.markedObjectsSet ]);
138
138
  }));
139
139
  y.set(this, (async () => {
140
140
  g(this, O, "f").call(this, true);
141
141
  }));
142
142
  k.set(this, (async e => {
143
- f(this, _, false, "f");
144
143
  this.updating = true;
145
144
  e.forEach((e => {
146
145
  this.objectsStatusMap.set(e, "updating");
@@ -157,7 +156,7 @@ const ne = class {
157
156
  if (e.result === "updated") {
158
157
  this.alreadyUpdatedObjectsIdsSet = new Set(this.alreadyUpdatedObjectsIdsSet).add(e.id);
159
158
  this.objectsStatusMap.set(e.id, "updated");
160
- await g(this, v, "f").markRow(e.id, false);
159
+ await g(this, w, "f").markRow(e.id, false);
161
160
  } else {
162
161
  this.objectsStatusMap.set(e.id, "pending");
163
162
  }
@@ -302,17 +301,24 @@ const ne = class {
302
301
  }
303
302
  }));
304
303
  S.set(this, (async e => {
304
+ f(this, _, false, "f");
305
305
  const t = e.detail.addedRowsId;
306
306
  const n = e.detail.removedRowsId;
307
- const i = await this.pendingItemsCheckedCallback({
308
- itemsChecked: t,
309
- itemsUnchecked: n
310
- });
311
- if (i === undefined) {
312
- // undo check/uncheck
313
- await g(this, L, "f").call(this, t, n);
314
- } else {
315
- await g(this, P, "f").call(this, i);
307
+ try {
308
+ const e = await this.pendingItemsCheckedCallback({
309
+ itemsChecked: t,
310
+ itemsUnchecked: n
311
+ });
312
+ if (e === undefined) {
313
+ // undo check/uncheck
314
+ await g(this, L, "f").call(this, t, n);
315
+ } else {
316
+ await g(this, P, "f").call(this, e);
317
+ }
318
+ } catch (e) {
319
+ //catch exception if necessary
320
+ } finally {
321
+ f(this, _, true, "f");
316
322
  }
317
323
  }));
318
324
  W.set(this, (e => {
@@ -356,7 +362,7 @@ const ne = class {
356
362
  this.pendingAndIgnored = await this.loadCallback(t, e);
357
363
  g(this, N, "f").call(this);
358
364
  // Is is required to mark/check all objects after loadCallback.
359
- g(this, E, "f").call(this);
365
+ g(this, U, "f").call(this);
360
366
  } catch (e) {
361
367
  // Error handling for update operation
362
368
  } finally {
@@ -369,14 +375,14 @@ const ne = class {
369
375
  * Iterates through all pending object IDs and adds them to the marked objects set
370
376
  * if they are not already in the committed objects set. This effectively identifies
371
377
  * and marks all the pending objects that still need to be processed.
372
- **/ E.set(this, (() => {
378
+ **/ U.set(this, (() => {
373
379
  for (const e of this.pendingIdsSet) {
374
380
  if (!this.alreadyUpdatedObjectsIdsSet.has(e)) {
375
381
  this.markedObjectsSet = new Set([ ...this.markedObjectsSet, e ]);
376
382
  }
377
383
  }
378
384
  }));
379
- U.set(this, (() => {
385
+ E.set(this, (() => {
380
386
  // this.pendingObjectsAfterActionFilter = this.#filteredObjects(
381
387
  // this.pendingAndIgnored.pendingForUpdate
382
388
  // );
@@ -405,15 +411,15 @@ const ne = class {
405
411
  A.set(this, (() => async e => {
406
412
  e.preventDefault();
407
413
  e.stopPropagation();
408
- const t = await g(this, v, "f").getSelectedRows();
409
- const n = (await g(this, v, "f").getSelectedCell()).rowId;
414
+ const t = await g(this, w, "f").getSelectedRows();
415
+ const n = (await g(this, w, "f").getSelectedCell()).rowId;
410
416
  const i = this.pendingIdsSet.has(n) ? "pending" : "ignored";
411
417
  let a = [];
412
418
  // remove selected rows from the other source, if any.
413
419
  if (t.length > 1 && i === "pending") {
414
420
  t.forEach((async e => {
415
421
  if (this.ignoredIdsSet.has(e)) {
416
- await g(this, v, "f").selectRow(e, false);
422
+ await g(this, w, "f").selectRow(e, false);
417
423
  } else {
418
424
  a.push(e);
419
425
  }
@@ -421,7 +427,7 @@ const ne = class {
421
427
  } else if (t.length > 1 && i === "ignored") {
422
428
  t.forEach((async e => {
423
429
  if (this.pendingIdsSet.has(e)) {
424
- await g(this, v, "f").selectRow(e, false);
430
+ await g(this, w, "f").selectRow(e, false);
425
431
  } else {
426
432
  a.push(e);
427
433
  }
@@ -436,26 +442,26 @@ const ne = class {
436
442
  });
437
443
  }));
438
444
  L.set(this, (async (e, t) => {
439
- if (g(this, v, "f")) {
445
+ if (g(this, w, "f")) {
440
446
  for (const t of e) {
441
- await g(this, v, "f").markRow(t, false);
447
+ await g(this, w, "f").markRow(t, false);
442
448
  }
443
449
  for (const e of t) {
444
- await g(this, v, "f").markRow(e, true);
450
+ await g(this, w, "f").markRow(e, true);
445
451
  }
446
452
  }
447
453
  }));
448
454
  P.set(this, (async e => {
449
- if (g(this, v, "f")) {
455
+ if (g(this, w, "f")) {
450
456
  const t = e.itemsToCheck;
451
457
  const n = e.itemsToUncheck;
452
458
  // check
453
459
  for (const e of t) {
454
- await g(this, v, "f").markRow(e, true);
460
+ await g(this, w, "f").markRow(e, true);
455
461
  }
456
462
  // uncheck
457
463
  for (const e of n) {
458
- await g(this, v, "f").markRow(e, false);
464
+ await g(this, w, "f").markRow(e, false);
459
465
  }
460
466
  }
461
467
  }));
@@ -481,10 +487,10 @@ const ne = class {
481
487
  */ D.set(this, (async e => {
482
488
  const t = e.detail;
483
489
  if (t) {
484
- const e = await g(this, v, "f").getMarkedRows();
490
+ const e = await g(this, w, "f").getMarkedRows();
485
491
  const t = e.filter((e => this.ignoredIdsSet.has(e)));
486
492
  if (t.length) {
487
- s(t, g(this, v, "f"));
493
+ s(t, g(this, w, "f"));
488
494
  }
489
495
  }
490
496
  }));
@@ -503,6 +509,7 @@ const ne = class {
503
509
  this.kbPropertiesChecked = false;
504
510
  this.typesComboBoxModel = undefined;
505
511
  this.selectedType = undefined;
512
+ this.isUpdateDisabled = false;
506
513
  this.objectsStatusMap = new Map;
507
514
  this.contextMenuCallback = undefined;
508
515
  this.pendingAndIgnored = {
@@ -547,11 +554,11 @@ const ne = class {
547
554
  this.pendingAndIgnored.ignoredObjects.forEach((e => {
548
555
  this.ignoredIdsSet.add(e.id);
549
556
  }));
550
- g(this, E, "f").call(this);
557
+ g(this, U, "f").call(this);
551
558
  // after pendingIdsSet.add and ignoredIdsSet.add
552
559
  g(this, N, "f").call(this);
553
560
  // after pendingIdsSet.add and ignoredIdsSet.add
554
- g(this, U, "f").call(this);
561
+ g(this, E, "f").call(this);
555
562
  }
556
563
  async componentWillLoad() {
557
564
  var e;
@@ -585,10 +592,15 @@ const ne = class {
585
592
  /**
586
593
  * Used by the host to instruct the component to force a data reload in the grids.
587
594
  */ async reload() {
588
- g(this, O, "f").call(this, true);
595
+ await g(this, O, "f").call(this, true);
596
+ }
597
+ /**
598
+ * Used by the host to instruct the component to disable the update button.
599
+ */ async disableUpdate(e) {
600
+ this.isUpdateDisabled = e;
589
601
  }
590
602
  render() {
591
- const e = this.updating || this.loading;
603
+ const e = this.updating || this.loading || this.isUpdateDisabled;
592
604
  const i = this.pendingObjectsAfterActionFilter.length === 0 && this.ignoredObjectsAfterActionFilter.length === 0;
593
605
  return t(n, {
594
606
  class: "widget"
@@ -686,7 +698,7 @@ const ne = class {
686
698
  // update button
687
699
  class: "button-primary button-update",
688
700
  disabled: !this.atLeastOneObjectIsChecked || e,
689
- onClick: g(this, w, "f")
701
+ onClick: g(this, v, "f")
690
702
  }, g(this, m, "f").filter.update)))), t("div", {
691
703
  class: "main spacing-body"
692
704
  }, !this.loading ? t("ch-tabular-grid", {
@@ -700,7 +712,7 @@ const ne = class {
700
712
  rowSelectionMode: "multiple",
701
713
  onRowMarkingChanged: g(this, j, "f"),
702
714
  onRowContextMenu: g(this, A, "f").call(this),
703
- ref: e => f(this, v, e, "f")
715
+ ref: e => f(this, w, e, "f")
704
716
  }, t("ch-tabular-grid-columnset", {
705
717
  class: "tabular-grid-column-set"
706
718
  }, t("ch-tabular-grid-column", {
@@ -794,14 +806,14 @@ const ne = class {
794
806
  }
795
807
  };
796
808
 
797
- m = new WeakMap, b = new WeakMap, _ = new WeakMap, v = new WeakMap, w = new WeakMap,
809
+ m = new WeakMap, b = new WeakMap, _ = new WeakMap, w = new WeakMap, v = new WeakMap,
798
810
  y = new WeakMap, k = new WeakMap, x = new WeakMap, M = new WeakMap, z = new WeakMap,
799
811
  C = new WeakMap, j = new WeakMap, S = new WeakMap, W = new WeakMap, I = new WeakMap,
800
- T = new WeakMap, N = new WeakMap, O = new WeakMap, E = new WeakMap, U = new WeakMap,
812
+ T = new WeakMap, N = new WeakMap, O = new WeakMap, U = new WeakMap, E = new WeakMap,
801
813
  A = new WeakMap, L = new WeakMap, P = new WeakMap, R = new WeakMap, $ = new WeakMap,
802
814
  D = new WeakMap;
803
815
 
804
816
  ne.style = u;
805
817
 
806
818
  export { ne as gx_ide_team_dev_update };
807
- //# sourceMappingURL=p-3d71b287.entry.js.map
819
+ //# sourceMappingURL=p-972dc777.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","updateCss","CSS_BUNDLES","CHECKBOX_CHECKED_VALUE","CHECKBOX_UNCHECKED_VALUE","DETAIL_LABEL_CLASSES","ADD_ICON","getIconPath","category","colorType","EDITED_ICON","FILTER_ICON","SEARCH_ICON","SUBSTRACT_ICON","WARNING_ICON","ERROR_ICON","SUCCESS_ICON","INFO_ICON","REFRESH_ICON","GxIdeTeamDevUpdate","_GxIdeTeamDevUpdate_componentLocale","set","this","_GxIdeTeamDevUpdate_actionsComboBoxModel","_GxIdeTeamDevUpdate_rowCheckedChangedByTheUser","_GxIdeTeamDevUpdate_chGridPendingForUpdateEl","_GxIdeTeamDevUpdate_updateCheckedClickedHandler","async","__classPrivateFieldGet","_GxIdeTeamDevUpdate_updateObjectsHandler","call","markedObjectsSet","_GxIdeTeamDevUpdate_reloadClickedHandler","_GxIdeTeamDevUpdate_loadData","selection","updating","forEach","itemToUpdate","objectsStatusMap","updateResult","updateCallback","objectResult","messages","length","objectsMessagesDataMap","delete","result","alreadyUpdatedObjectsIdsSet","Set","add","markRow","_GxIdeTeamDevUpdate_renderActionCellContent","action","iconColor","actions","insert","modify","modifyWithConflicts","h","class","type","src","style","backgroundColor","_GxIdeTeamDevUpdate_updateSingleObject","objectId","newobjectsStatusMap","Map","_GxIdeTeamDevUpdate_renderObjectStatus","status","get","updatePillAsButton","update","classes","onClick","_GxIdeTeamDevUpdate_renderRows","objects","pendingObjectsAfterActionFilter","ignoredObjectsAfterActionFilter","object","typeIcon","alreadyUpdated","has","hideCheckbox","marked","key","rowid","ref","el","setAttribute","size","renderObjectTypeWithIcon","description","formatDate","modifiedOn","message","MESSAGE_ICON","text","_GxIdeTeamDevUpdate_rowMarkingChangedHandler","event","markedRowsIds","detail","rowsId","filter","markedObjectId","_GxIdeTeamDevUpdate_updatePendingCheckedItems","__classPrivateFieldSet","addedRowsIds","addedRowsId","removedRowsId","pendingItemCheckedResult","pendingItemsCheckedCallback","itemsChecked","itemsUnchecked","undefined","_GxIdeTeamDevUpdate_revertPendingCommitsCheckboxes","_GxIdeTeamDevUpdate_togglePendingCommitsCheckboxes","_a","_GxIdeTeamDevUpdate_searchInputHandler","searchValue","_GxIdeTeamDevUpdate_actionChangedHandler","selectedAction","_GxIdeTeamDevUpdate_typeChangedHandler","selectedType","_GxIdeTeamDevUpdate_setInitialObjectsStatus","pendingAndIgnored","pendingForUpdate","pendingObject","ignoredObjects","ignoredObject","forceLoad","filters","search","kbProperties","kbPropertiesChecked","loading","clear","loadCallback","_GxIdeTeamDevUpdate_markPendingObjects","error","pendingId","pendingIdsSet","_GxIdeTeamDevUpdate_applyClientFilter","_GxIdeTeamDevUpdate_onRowContextMenuHandler","ev","preventDefault","stopPropagation","getSelectedRows","selectedRowId","getSelectedCell","rowId","source","filteredSelection","ignoredIdsSet","selectRow","push","contextMenuCallback","clientX","clientY","itemsToToggle","itemsToCheck","itemsToUncheck","_GxIdeTeamDevUpdate_kbPropertiesChangedHandler","_GxIdeTeamDevUpdate_sortTabularGridColumnCallback","e","columnId","objectProperty","dateType","COLUMNS_IDS","lastSynchronized","sortTabularGridColumn","_GxIdeTeamDevUpdate_columnSelectorClickedCallback","allRowsChecked","getMarkedRows","ignoredMarkedRowsIds","uncheckIgnoredObjects","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","alreadyUpdatedObjectsIdsSetChanged","newUpdatedObjectsIdsSet","pendingIdsSetAndUpdatedIdsSetAreEqual","areSetsEqual","allPendingAreUpdated","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","state","pendingAndIgnoredChanged","pending","ignored","componentWillLoad","Locale","getComponentStrings","allActions","types","typesComboBoxModel","componentDidLoad","reload","disableUpdate","isUpdateDisabled","render","disableControls","gridIsEmpty","Host","model","commitDetail","title","genexusServer","openServerCallback","updateFrom","serverUrl","knowledgeBase","kbName","version","versionName","lastFullUpdate","disabled","accessibleName","searchAccessibleName","placeholder","searchPlaceholder","onInput","debounce","config","inputDebounce","typeAccesibleName","typePlaceholder","actionAccesibleName","actionPlaceholder","checkedValue","keyboardNavigationMode","rowSelectionMode","onRowMarkingChanged","onRowContextMenu","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","sortable","onColumnSortChanged","onColumnSelectorClicked","tabularGrid","colSize","isAnimated","stateIconSrc","stateTitle","cancelLabel","loader","loaderTitle","show"],"sources":["src/components/team-dev/version-control/common/object-type-to-combo-box.ts","src/components/team-dev/update/update.scss?tag=gx-ide-team-dev-update&encapsulation=shadow","src/components/team-dev/update/update.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType } from \"../../../../components\";\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name,\n startImgSrc: objectType.icon\n }));\n","@import \"../common/styles.scss\";\n@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n --pill-border-radius: 12px;\n --pill-padding-inline: 8px;\n --pill-padding-block: 2px;\n --pill-font-size: var(--font-size-body-s);\n\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content max-content 1fr;\n}\n$header-item-common-inline-padding: 24px;\n$header-item-common-separator-border: 1px solid\n var(--mer-border-color__on-elevation--01);\n\n%header-item-common {\n padding-inline: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n}\n%header-item-common-start {\n padding-inline-end: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n}\n%header-item-common-end {\n padding-inline-start: $header-item-common-inline-padding;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n display: grid;\n grid-template-columns: 1fr max-content;\n}\n\n// header detail\n.header__detail {\n display: grid;\n row-gap: var(--mer-spacing--md);\n grid-auto-columns: max-content;\n grid-auto-rows: max-content;\n grid-template-areas:\n \"detail-heading-gx . . .\"\n \"detail-genexus-server detail-knowledge-base detail-version detail-last-full-update\";\n}\n.detail__label {\n color: var(--mer-color__neutral-gray--400);\n}\n\n.detail__heading-genexus-server {\n grid-area: detail-heading-gx;\n}\n.detail__genexus-server {\n grid-area: detail-genexus-server;\n @extend %header-item-common-start;\n\n > a {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n }\n}\n.detail__link {\n align-items: start;\n color: var(--mer-text__primary);\n text-decoration: underline;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n}\n.detail__knowledge-base {\n grid-area: detail-knowledge-base;\n @extend %header-item-common;\n}\n.detail__version {\n grid-area: detail-version;\n @extend %header-item-common;\n}\n.detail__last-full-update {\n grid-area: detail-last-full-update;\n @extend %header-item-common-end;\n}\n\n// filter\n.filter-container {\n container-type: inline-size;\n box-sizing: border-box;\n}\n.filter {\n display: grid;\n margin-block-start: var(--mer-spacing--lg);\n grid-template-areas: \"filter-search filter-types filter-actions filter-kb-properties filter-buttons\";\n grid-template-columns: 200px 200px 200px max-content 1fr;\n gap: 12px;\n}\n@container (max-width: 1100px) {\n .filter-container > .filter {\n grid-template-columns: 200px 200px 200px 1fr;\n grid-template-areas:\n \"filter-search filter-types filter-actions filter-buttons\"\n \"filter-kb-properties . . .\";\n grid-auto-rows: max-content;\n }\n}\n@container (max-width: 900px) {\n .filter-container > .filter {\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-areas:\n \"filter-search filter-types filter-actions\"\n \"filter-kb-properties filter-buttons filter-buttons\";\n grid-auto-rows: max-content;\n }\n}\n.filter__search {\n grid-area: filter-search;\n}\n.filter__types {\n grid-area: filter-types;\n}\n.filter__actions {\n grid-area: filter-actions;\n}\n.filter__kb-properties {\n grid-area: filter-kb-properties;\n}\n.filter__buttons {\n margin-inline-start: auto;\n grid-area: filter-buttons;\n}\n\n// main\n.main {\n position: relative;\n display: grid;\n overflow: auto;\n}\n.loader {\n position: relative;\n inline-size: 100%;\n block-size: 100%;\n inset-block-start: 0;\n}\n.tabular-grid {\n border-radius: 4px;\n overflow: hidden;\n}\n\n.empty-state {\n block-size: 100%;\n}\n.loader {\n --elevation-background-color: var(--mer-surface__elevation--01);\n}\n\n.messages-list {\n margin: 0;\n padding: 0;\n list-style: none;\n max-inline-size: 800px;\n padding: 8px 0;\n list-style-type: none;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--3xs);\n}\n.message-description {\n line-height: 1.5; // WA. Line height looks too tight.\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.message-icon {\n flex-shrink: 0;\n}\n\n.tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\n\n// - - - - - - - - - - - - - -\n// WA (WORK AROUNDS)\n// - - - - - - - - - - - - - -\n\n.input-comments-container {\n position: relative;\n}\n// ch-edit for comments WA's\n// Figma design for this component displays the textarea witout border, and with a little more line-height.\n// The following styles are a temporary WA that should be brouhgt to Mercury DS.\n.input-comments {\n --control__border-color: transparent;\n padding-block: 0 !important;\n padding-inline: 0 !important;\n --line-height-tight: 1.4;\n block-size: 100%;\n background-color: var(--mer-surface);\n transition:\n var(--mer-timing--super-fast) block-size,\n var(--mer-timing--super-fast) background-color,\n var(--mer-timing--super-fast) padding-block,\n var(--mer-timing--super-fast) padding-inline;\n}\n.input-comments:focus {\n position: absolute;\n block-size: 200px;\n inline-size: 100%;\n z-index: 99;\n background-color: var(--mer-surface__elevation--01);\n padding-block: var(--control__padding-block) !important;\n padding-inline: var(--control__padding-inline) !important;\n}\n\nch-tabular-grid-cell.tabular-grid-cell::part(actions-icon) {\n background-size: contain; //force icon fit container\n margin-inline-end: 0;\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--enabled);\n cursor: pointer;\n &:hover {\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--hover);\n }\n &:active {\n --icon-path: var(--icon__gemini-tools_show-more-vertical_neutral--active);\n }\n}\n\n.tabular-grid-row-actions::part(main),\n.property-grid-row-actions::part(main) {\n // gap not required since buttons are tertiary.\n // extra space perceived.\n gap: 0 !important;\n}\n\n.tabular-grid-row-actions {\n // Butons are center by default, but design dictates start alignemnt\n > button {\n justify-content: start;\n }\n}\n\n// These static type of pills do not exist on Mercury yet.\n// They should be defined on Mercury. The actual pills on Mercury\n// are combo-boxes. Not what we need for this case.\n\n.pill {\n --pill-background-color: transparent;\n --pill-color: transparent;\n --pill-border-color: transparent;\n\n background-color: var(--pill-background-color);\n color: var(--pill-color);\n border: 1px solid var(--pill-border-color);\n inline-size: 100%;\n padding: var(--pill-padding-block) var(--pill-padding-inline);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--pill-border-radius);\n position: relative;\n font-weight: var(--font-weight-semi-bold);\n\n &--update,\n &--pending {\n --pill-background-color: var();\n --pill-color: var(--mer-color__neutral-gray--400);\n --pill-border-color: var();\n }\n &--to-merge-marked {\n --pill-background-color: var();\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var();\n }\n &--ignored {\n --pill-background-color: var(--mer-surface__elevation--02);\n --pill-color: var(--mer-text__on-disabled);\n --pill-border-color: var(--mer-border-color__primary--disabled);\n }\n &--pending {\n --pill-background-color: var(--mer-color__tinted-primary--8);\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var(--mer-color__tinted-primary--50);\n }\n &--warning {\n --pill-background-color: var(--mer-color__tinted-yellow--5);\n --pill-color: var(--mer-border-color__warning);\n --pill-border-color: var(--mer-color__tinted-yellow--60);\n }\n &--error {\n --pill-background-color: var(--mer-color__tinted-red--5);\n --pill-color: var(--mer-border-color__error);\n --pill-border-color: var(--mer-color__tinted-red--60);\n }\n &--updated {\n --pill-background-color: var(--mer-color__tinted-green--5);\n --pill-color: var(--mer-border-color__success);\n --pill-border-color: var(--mer-color__tinted-green--60);\n }\n &--transitioning {\n // used to hide the text, before updating the caption (smooth transtion)\n --pill-color: transparent;\n }\n}\n.updating-spinner-caption {\n display: flex;\n align-items: center;\n gap: 6px;\n $size: 14px;\n --status-circle-color: transparent;\n --status-circle-size: $size;\n --status-circle-inset-inline-start: 14px;\n --pill-color: var(--mer-border-color__primary);\n &::before {\n display: inline-block;\n content: \"\";\n\n @include spinner(\n $size,\n var(--mer-color__primary--300),\n var(--mer-color__tinted-primary--50)\n );\n }\n}\n.tabular-grid .button-secondary {\n --control__padding-block: var(--pill-padding-block);\n --control__padding-inline: var(--pill-padding-inline);\n font-size: inherit;\n font-weight: inherit;\n /* font-size: var(--pill-font-size); */\n}\n\n.tabular-grid .tabular-grid-cell--for-pill {\n --grid-cell__padding-block: 4px;\n align-items: center;\n justify-content: center;\n\n // --grid-cell__padding-inline: 0;\n}\n\n.tabular-grid.disabled-custom-selector .tabular-grid-cell::part(selector-label),\n.tabular-grid.disabled-custom-selector .tabular-grid-column::part(bar-selector),\n.tabular-grid.disabled-custom-selector .tabular-grid-cell::part(actions-icon) {\n pointer-events: none;\n opacity: 0.5;\n}\n.tabular-grid-column--settings-custom-selector,\n.tabular-grid-cell--settings-custom-selector {\n --grid-cell__padding-inline: 0;\n --grid-cell__padding-block: 0;\n}\n.tabular-grid-cell::part(actions-icon) {\n padding-block: 6px;\n}\nch-tabular-grid-cell.tabular-grid-cell::part(actions-icon) {\n block-size: 100%;\n display: block;\n background-size: 14px;\n padding-inline: 16px;\n}\n\n.tabular-grid-cell.no-checkbox-custom-selector::part(selector-label) {\n visibility: hidden;\n pointer-events: none;\n}\n\n.tabular-grid-row-actions::part(window) {\n background-color: var(--mer-surface__elevation--02) !important;\n}\n\n.tabular-grid-row .tabular-grid-cell:nth-child(3) {\n min-inline-size: 200px;\n}\n\n// - - - - - - - - - - - - - -\n// END OF WA\n// - - - - - - - - - - - - - -\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n JSX,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../../common/locale\";\nimport {\n ChCheckboxCustomEvent,\n ChEditCustomEvent,\n ComboBoxModel,\n TabularGridColumnSelectorClickedEvent,\n TabularGridColumnSortChangedEvent,\n TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport uncheckIgnoredObjects from \"../version-control/common/uncheck-ignored\";\nimport { renderObjectTypeWithIcon } from \"../common/utilities\";\nimport { formatDate } from \"../../../common/helpers\";\nimport {\n ContextMenuInfo,\n ItemsCheckedResult,\n ItemsCheckedState,\n ObjectType\n} from \"../../../common/types\";\nimport { config } from \"../../../common/config\";\nimport { mapObjectTypeToComboBoxItemModel } from \"../version-control/common/object-type-to-combo-box\";\nimport { COLUMNS_IDS } from \"../version-control/common/tabular-grid-render\";\nimport sortTabularGridColumn, {\n type SortTabularGridColumnDataType\n} from \"../../../common/chameleon/tabular-grid-column-sort\";\nimport areSetsEqual from \"../version-control/common/are-sets-equal\";\nimport {\n Action,\n ActionForFilter,\n LoadRemoteChangesCallback,\n ModifiedObject,\n UpdateCallback,\n UpdateData,\n UpdateFiltersData,\n UpdateStatus,\n UpdateStatusInternal\n} from \"../version-control/common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tabular-grid\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst CHECKBOX_CHECKED_VALUE = \"true\";\nconst CHECKBOX_UNCHECKED_VALUE = \"false\";\n\nconst DETAIL_LABEL_CLASSES = \"detail__label body-semi-bold-s\";\n\n// icons\nconst ADD_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"on-elevation\"\n});\nconst EDITED_ICON = getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"on-elevation\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n});\nconst SUBSTRACT_ICON = getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"on-elevation\"\n});\nconst WARNING_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n});\nconst ERROR_ICON = getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"error\"\n});\nconst SUCCESS_ICON = getIconPath({\n category: \"system\",\n name: \"check \",\n colorType: \"success\"\n});\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-elevation\"\n});\nconst REFRESH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-team-dev-update\",\n styleUrl: \"update.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-update\"]\n})\nexport class GxIdeTeamDevUpdate {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #actionsComboBoxModel: { caption: string; value: ActionForFilter }[];\n\n /**\n * Used to determine if pendingItemsCheckedCallback callback has to be called or not.\n * It should be ignored if the grid checkboxes state is changed programmatically, by\n * setting markRow to false once the object has been successfully updated, for example.\n */\n #rowCheckedChangedByTheUser: boolean = true;\n\n @Element() el: HTMLGxIdeTeamDevBringChangesElement;\n\n #chGridPendingForUpdateEl!: HTMLChTabularGridElement;\n\n // - - - - - - - - - - - - -\n // States Bring Changes\n // - - - - - - - - - - - - -\n\n /**\n * It hols a boolean indicating if at least one object from the tabular-grid is checked, for merging.\n */\n @State() atLeastOneObjectIsChecked: boolean = false;\n\n /**\n * True while commitObjects hasn't been loaded or is empty. Used to display a loader.\n */\n @State() loading: boolean = true;\n\n /**\n * The current search filter value\n */\n @State() menuContextAction: Action;\n\n /**\n * The current search filter value\n */\n @State() searchValue: string = \"\";\n\n /**\n * The current state filter value\n */\n @State() selectedAction: ActionForFilter = \"all-actions\";\n\n /**\n * A set that stores the marked state of each object cell. This is necessary because filtering the grid * causes marked cells to lose their state.\n */\n @State() markedObjectsSet: Set<string> = new Set<string>([]);\n @Watch(\"markedObjectsSet\")\n markedObjectsSetChanged(newMarkedObjectsSet: Set<string>) {\n this.atLeastOneObjectIsChecked = newMarkedObjectsSet.size > 0;\n }\n\n /**\n * A set that holds the id's of the objects that have been updated already.\n */\n @State() alreadyUpdatedObjectsIdsSet: Set<string> = new Set<string>([]);\n @Watch(\"alreadyUpdatedObjectsIdsSet\")\n alreadyUpdatedObjectsIdsSetChanged(newUpdatedObjectsIdsSet: Set<string>) {\n const pendingIdsSetAndUpdatedIdsSetAreEqual = areSetsEqual(\n newUpdatedObjectsIdsSet,\n this.pendingIdsSet\n );\n\n this.allPendingAreUpdated =\n pendingIdsSetAndUpdatedIdsSetAreEqual && this.pendingIdsSet.size > 0;\n }\n\n /**\n * A set that holds the id's of all the pending objects. Used to quickly determine if the selected rows belong\n * to \"pending\" or not. This information is required for the ContextMenuCallback callback. This set has to be updated\n * on every loadCallback.\n */\n @State() pendingIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the id's of all the ignored objects. Used to quickly determine if the selected rows belong\n * to \"ignored\" or not. This information is required for the ContextMenuCallback callback. This set has to be updated\n * on every loadCallback.\n */\n @State() ignoredIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A map that holds object messages, after trying to update ('info' | ‘success’ | 'warning' | 'error')\n */\n @State() objectsMessagesDataMap: Map<string, MessageData[]> = new Map();\n\n /**\n * Set to true when objects are being mered. This helps disabling controls until all objects are done.\n */\n @State() updating: boolean = false;\n\n // - - - - - - - - - - - - -\n // State Update\n // - - - - - - - - - - - - -\n\n /**\n * A boolean that indicates if all the pending objects, have been updated\n * already.\n */\n @State() allPendingAreUpdated: boolean = false;\n\n /**\n * The \"KB Properties\" checkbox value\n */\n @State() kbPropertiesChecked: boolean = false;\n\n /**\n * The combobox model for the types filter.\n */\n @State() typesComboBoxModel: ComboBoxModel;\n\n /**\n * The selected type\n */\n @State() selectedType: string;\n\n /**\n * Indicates if the update button should be disabled\n */\n @State() isUpdateDisabled: boolean = false;\n\n /**\n * A map that holds the current update objects states (\"inserted\" | \"modified\" | \"modified-with-conflicts\" | \"deleted\" | \"updating\" | \"update\")\n */\n @State() objectsStatusMap: Map<string, UpdateStatusInternal> = new Map();\n @Watch(\"objectsStatusMap\")\n objectsStatusMapChanged(\n newObjectsStatusMap: Map<string, UpdateStatusInternal>\n ) {\n const someObjectIsUpdating = [...newObjectsStatusMap.entries()].find(\n ([, state]) => state === \"updating\"\n );\n\n if (!someObjectIsUpdating) {\n this.updating = false;\n }\n }\n\n // - - - - - - - - - - - - -\n // Properties Bring Changes\n // - - - - - - - - - - - - -\n\n /**\n * Callback invoked when user activates the context menu on any of the grids.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * All objects (\"pending for update\" and \"ignored objects\") before \"state\" filter\n */\n @State() pendingAndIgnored: UpdateData = {\n pendingForUpdate: [],\n ignoredObjects: []\n };\n @Watch(\"pendingAndIgnored\")\n pendingAndIgnoredChanged() {\n this.pendingIdsSet.clear(); // before pendingIdsSet.add\n this.ignoredIdsSet.clear(); // before pendingIdsSet.add\n this.objectsMessagesDataMap = new Map();\n this.alreadyUpdatedObjectsIdsSet = new Set();\n this.markedObjectsSet = new Set(); // before #markPendingObjects\n\n this.pendingAndIgnored.pendingForUpdate.forEach(pending => {\n this.pendingIdsSet.add(pending.id);\n });\n\n this.pendingAndIgnored.ignoredObjects.forEach(ignored => {\n this.ignoredIdsSet.add(ignored.id);\n });\n\n this.#markPendingObjects(); // after pendingIdsSet.add and ignoredIdsSet.add\n this.#setInitialObjectsStatus(); // after pendingIdsSet.add and ignoredIdsSet.add\n\n this.#applyClientFilter();\n }\n\n /**\n * Pending objects after \"action\" filter\n */\n @State() pendingObjectsAfterActionFilter: ModifiedObject[] = [];\n\n /**\n * Ignored objects after \"action\" filter\n */\n @State() ignoredObjectsAfterActionFilter: ModifiedObject[] = [];\n\n /**\n * Callback invoked to return the list of data types loaded from file or url.\n */\n @Prop() readonly loadCallback!: LoadRemoteChangesCallback;\n\n /**\n * Callback invoked to return information of a Font type of data.\n */\n @Prop() readonly pendingItemsCheckedCallback!: PendingItemsCheckedCallback;\n\n /**\n * Possible values for type filter\n */\n @Prop() readonly types: ObjectType[];\n\n /**\n * If true, the \"Action\" column will display a button instead of a pill, only when the action is\n */\n @Prop() readonly updatePillAsButton: boolean = false;\n\n // - - - - - - - - - - - - -\n // Properties Update\n // - - - - - - - - - - - - -\n\n /**\n * Callback invoked when the update process is to be started (’Update’ button).\n */\n @Prop() readonly updateCallback!: UpdateCallback;\n\n /**\n * Callback invoked when user clicks in server url of Update From group.\n */\n @Prop() readonly openServerCallback!: () => Promise<void>;\n\n /**\n * Information to show in Update From group.\n */\n @Prop() readonly updateFrom: UpdateFromData;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Initiate \"actions\" combo box filter\n this.#actionsComboBoxModel = [\n {\n caption: this.#componentLocale.actions.allActions,\n value: \"all-actions\"\n },\n {\n caption: this.#componentLocale.actions.insert,\n value: \"inserted\"\n },\n {\n caption: this.#componentLocale.actions.modify,\n value: \"modified\"\n },\n {\n caption: this.#componentLocale.actions.modifyWithConflicts,\n value: \"modified-with-conflicts\"\n },\n {\n caption: this.#componentLocale.actions.delete,\n value: \"deleted\"\n }\n ];\n\n // Set type initial value\n this.selectedType = this.types[0]?.id;\n\n this.typesComboBoxModel = mapObjectTypeToComboBoxItemModel(this.types);\n }\n\n async componentDidLoad() {\n await this.#loadData(true);\n\n // initialize \"allPendingAreUpdated\"\n this.alreadyUpdatedObjectsIdsSetChanged(this.alreadyUpdatedObjectsIdsSet);\n }\n\n /**\n * Used by the host to instruct the component to force a data reload in the grids.\n */\n @Method()\n async reload() {\n await this.#loadData(true);\n }\n\n /**\n * Used by the host to instruct the component to disable the update button.\n */\n @Method()\n async disableUpdate(value: boolean) {\n this.isUpdateDisabled = value;\n }\n\n #updateCheckedClickedHandler = async () => {\n this.#updateObjectsHandler([...this.markedObjectsSet]);\n };\n\n #reloadClickedHandler = async () => {\n this.#loadData(true);\n };\n\n #updateObjectsHandler = async (selection: string[]) => {\n this.updating = true;\n\n selection.forEach(itemToUpdate => {\n this.objectsStatusMap.set(itemToUpdate, \"updating\");\n });\n\n const updateResult = await this.updateCallback(selection);\n updateResult.forEach(async objectResult => {\n const messages = objectResult.messages;\n if (messages.length) {\n this.objectsMessagesDataMap.set(objectResult.id, objectResult.messages);\n } else {\n // clear messages\n this.objectsMessagesDataMap.delete(objectResult.id);\n }\n if (objectResult.result === \"updated\") {\n this.alreadyUpdatedObjectsIdsSet = new Set(\n this.alreadyUpdatedObjectsIdsSet\n ).add(objectResult.id);\n\n this.objectsStatusMap.set(objectResult.id, \"updated\");\n await this.#chGridPendingForUpdateEl.markRow(objectResult.id, false);\n } else {\n this.objectsStatusMap.set(objectResult.id, \"pending\");\n }\n });\n this.updating = false;\n };\n\n #renderActionCellContent = (\n action: Action\n ): JSX.Element[] | null | string => {\n let icon: string;\n let caption: string;\n let iconColor: string;\n\n if (action === \"deleted\") {\n icon = SUBSTRACT_ICON;\n caption = this.#componentLocale.actions.delete;\n iconColor = \"--mer-icon__error\";\n } else if (action === \"inserted\") {\n icon = ADD_ICON;\n caption = this.#componentLocale.actions.insert;\n iconColor = \"--mer-icon__success\";\n } else if (action === \"modified\") {\n icon = EDITED_ICON;\n caption = this.#componentLocale.actions.modify;\n iconColor = \"--mer-icon__warning\";\n } else if (action === \"modified-with-conflicts\") {\n icon = WARNING_ICON;\n caption = this.#componentLocale.actions.modifyWithConflicts;\n iconColor = \"--mer-icon__warning\";\n } else if (!action) {\n // proably is \"ignored\"\n return null;\n }\n\n return (\n <span class=\"custom-icon-text-wrapper\">\n <ch-image\n type=\"mask\"\n class=\"icon-md\"\n src={icon}\n style={{ backgroundColor: `var(${iconColor})` }}\n ></ch-image>\n {`${caption}`}\n </span>\n );\n };\n\n #updateSingleObject: (objectId: string) => () => void =\n objectId => async () => {\n const newobjectsStatusMap = new Map(this.objectsStatusMap);\n newobjectsStatusMap.set(objectId, \"updating\");\n this.objectsStatusMap = newobjectsStatusMap;\n this.#updateObjectsHandler([objectId]);\n };\n\n #renderObjectStatus = (objectId: string): JSX.Element[] => {\n const status = this.objectsStatusMap.get(objectId);\n\n const caption =\n status === \"pending\" && this.updatePillAsButton\n ? this.#componentLocale.status.update\n : this.#componentLocale.status[status];\n if (status === \"updating\") {\n return <span class=\"updating-spinner-caption\">{caption}</span>;\n }\n const classes = `pill pill--${status}`;\n if (this.updatePillAsButton && status === \"pending\") {\n return (\n <button\n class=\"button-secondary pill pill--update\"\n onClick={this.#updateSingleObject(objectId)}\n >\n {caption}\n </button>\n );\n } else {\n return <span class={classes}>{caption}</span>;\n }\n };\n\n #renderRows = (type: UpdateSourceType): JSX.Element[] => {\n let objects: ModifiedObject[];\n if (type === \"pending\") {\n objects = this.pendingObjectsAfterActionFilter;\n } else if (type === \"ignored\") {\n objects = this.ignoredObjectsAfterActionFilter;\n }\n\n return objects.map(object => {\n const objectType: ObjectType = {\n id: object.id,\n icon: object.typeIcon,\n name: object.type\n };\n\n const alreadyUpdated = this.alreadyUpdatedObjectsIdsSet.has(object.id);\n const hideCheckbox = alreadyUpdated || type === \"ignored\";\n\n const marked = this.markedObjectsSet.has(object.id);\n\n const messages = this.objectsMessagesDataMap.get(object.id);\n\n return (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n key={object.id}\n rowid={object.id}\n ref={(el: HTMLElement) =>\n marked && el?.setAttribute(\"marked\", \"true\")\n }\n >\n <ch-tabular-grid-cell\n cell-type=\"rich\"\n row-selector=\"true\"\n class={{\n \"tabular-grid-cell\": true,\n \"no-checkbox-custom-selector\": hideCheckbox\n }}\n size=\"max-content\"\n >\n {object.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(objectType)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {object.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(object.modifiedOn)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderActionCellContent(object.action)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell--for-pill\">\n {this.#renderObjectStatus(object.id)}\n </ch-tabular-grid-cell>\n\n {messages?.length && (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty\n class={{\n \"tabular-grid-rowset-empty\": true\n }}\n >\n <ul class=\"messages-list\">\n {messages.map(message => {\n let MESSAGE_ICON;\n if (message.type === \"error\") {\n MESSAGE_ICON = ERROR_ICON;\n } else if (message.type === \"warning\") {\n MESSAGE_ICON = WARNING_ICON;\n } else if (message.type === \"success\") {\n MESSAGE_ICON = SUCCESS_ICON;\n } else {\n // info\n MESSAGE_ICON = INFO_ICON;\n }\n\n return (\n <li class=\"message-description\">\n <ch-image\n class=\"icon-md message-icon\"\n src={MESSAGE_ICON}\n ></ch-image>\n {message.text}\n </li>\n );\n })}\n </ul>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid-row>\n );\n });\n };\n\n #rowMarkingChangedHandler = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const markedRowsIds = event.detail.rowsId;\n this.markedObjectsSet = new Set(\n markedRowsIds.filter(\n markedObjectId => !this.alreadyUpdatedObjectsIdsSet.has(markedObjectId)\n )\n );\n\n if (this.#rowCheckedChangedByTheUser) {\n this.#updatePendingCheckedItems(event);\n }\n };\n\n #updatePendingCheckedItems = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n this.#rowCheckedChangedByTheUser = false;\n const addedRowsIds = event.detail.addedRowsId;\n const removedRowsId = event.detail.removedRowsId;\n try {\n const pendingItemCheckedResult = await this.pendingItemsCheckedCallback({\n itemsChecked: addedRowsIds,\n itemsUnchecked: removedRowsId\n });\n\n if (pendingItemCheckedResult === undefined) {\n // undo check/uncheck\n await this.#revertPendingCommitsCheckboxes(addedRowsIds, removedRowsId);\n } else {\n await this.#togglePendingCommitsCheckboxes(pendingItemCheckedResult);\n }\n } catch {\n //catch exception if necessary\n } finally {\n this.#rowCheckedChangedByTheUser = true;\n }\n };\n\n #searchInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.searchValue = event.detail as string;\n this.#loadData();\n };\n\n // Local Methods Update\n\n #actionChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedAction = event.detail as ActionForFilter;\n this.#loadData();\n };\n\n #typeChangedHandler = async (event: CustomEvent<string> | InputEvent) => {\n this.selectedType = event.detail as string;\n this.#loadData();\n };\n\n #setInitialObjectsStatus = (): void => {\n this.pendingAndIgnored.pendingForUpdate.forEach(pendingObject => {\n const status: UpdateStatusInternal =\n (pendingObject.status as UpdateStatus) ?? \"pending\";\n\n this.objectsStatusMap.set(pendingObject.id, status);\n if (status === \"updated\") {\n this.alreadyUpdatedObjectsIdsSet.add(pendingObject.id);\n }\n });\n this.pendingAndIgnored.ignoredObjects.forEach(ignoredObject => {\n const status: UpdateStatusInternal =\n (ignoredObject.status as UpdateStatus) ?? \"ignored\";\n this.objectsStatusMap.set(ignoredObject.id, status);\n });\n };\n\n #loadData = async (forceLoad: boolean = false): Promise<void> => {\n const filters: UpdateFiltersData = {\n search: this.searchValue,\n type: this.selectedType,\n kbProperties: this.kbPropertiesChecked,\n action: this.selectedAction\n };\n\n try {\n this.loading = true;\n this.objectsMessagesDataMap.clear();\n\n this.pendingAndIgnored = await this.loadCallback(filters, forceLoad);\n this.#setInitialObjectsStatus();\n\n // Is is required to mark/check all objects after loadCallback.\n this.#markPendingObjects();\n } catch (error) {\n // Error handling for update operation\n } finally {\n this.loading = false;\n }\n };\n\n /**\n * Marks all pending objects that have not been committed yet.\n *\n * Iterates through all pending object IDs and adds them to the marked objects set\n * if they are not already in the committed objects set. This effectively identifies\n * and marks all the pending objects that still need to be processed.\n **/\n #markPendingObjects = () => {\n for (const pendingId of this.pendingIdsSet) {\n if (!this.alreadyUpdatedObjectsIdsSet.has(pendingId)) {\n this.markedObjectsSet = new Set([...this.markedObjectsSet, pendingId]);\n }\n }\n };\n\n #applyClientFilter = () => {\n // this.pendingObjectsAfterActionFilter = this.#filteredObjects(\n // this.pendingAndIgnored.pendingForUpdate\n // );\n this.pendingObjectsAfterActionFilter =\n this.pendingAndIgnored.pendingForUpdate;\n // this.ignoredObjectsAfterActionFilter = this.#filteredObjects(\n // this.pendingAndIgnored.ignoredObjects\n // );\n this.ignoredObjectsAfterActionFilter =\n this.pendingAndIgnored.ignoredObjects;\n };\n\n // #filteredObjects = (objects: ModifiedObject[]): ModifiedObject[] => {\n // let filtered = objects;\n\n // // name or description\n // if (this.searchValue.length) {\n // filtered = filtered.filter(object => {\n // const nameFiltered = object.name\n // .toLowerCase()\n // .includes(this.searchValue.toLowerCase());\n\n // const descriptionFiltered = object.description\n // .toLowerCase()\n // .includes(this.searchValue.toLowerCase());\n\n // return nameFiltered || descriptionFiltered;\n // });\n // }\n\n // return filtered;\n // };\n\n #onRowContextMenuHandler =\n () => async (ev: CustomEvent<TabularGridRowContextMenuEvent>) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n const selection = await this.#chGridPendingForUpdateEl.getSelectedRows();\n\n const selectedRowId = (\n await this.#chGridPendingForUpdateEl.getSelectedCell()\n ).rowId;\n\n const source: UpdateSourceType = this.pendingIdsSet.has(selectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n let filteredSelection: string[] = [];\n // remove selected rows from the other source, if any.\n if (selection.length > 1 && source === \"pending\") {\n selection.forEach(async selectedRowId => {\n if (this.ignoredIdsSet.has(selectedRowId)) {\n await this.#chGridPendingForUpdateEl.selectRow(\n selectedRowId,\n false\n );\n } else {\n filteredSelection.push(selectedRowId);\n }\n });\n } else if (selection.length > 1 && source === \"ignored\") {\n selection.forEach(async selectedRowId => {\n if (this.pendingIdsSet.has(selectedRowId)) {\n await this.#chGridPendingForUpdateEl.selectRow(\n selectedRowId,\n false\n );\n } else {\n filteredSelection.push(selectedRowId);\n }\n });\n } else {\n filteredSelection = selection;\n }\n\n await this.contextMenuCallback(source, {\n selection: filteredSelection,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\n\n #revertPendingCommitsCheckboxes = async (\n addedRowsIds: string[],\n removedRowsId: string[]\n ) => {\n if (this.#chGridPendingForUpdateEl) {\n for (const rowId of addedRowsIds) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, false);\n }\n for (const rowId of removedRowsId) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, true);\n }\n }\n };\n\n #togglePendingCommitsCheckboxes = async (\n itemsToToggle: ItemsCheckedResult\n ) => {\n if (this.#chGridPendingForUpdateEl) {\n const itemsToCheck: string[] = itemsToToggle.itemsToCheck;\n const itemsToUncheck: string[] = itemsToToggle.itemsToUncheck;\n // check\n for (const rowId of itemsToCheck) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, true);\n }\n // uncheck\n for (const rowId of itemsToUncheck) {\n await this.#chGridPendingForUpdateEl.markRow(rowId, false);\n }\n }\n };\n\n #kbPropertiesChangedHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.kbPropertiesChecked = event.detail === CHECKBOX_CHECKED_VALUE;\n this.#loadData(true);\n };\n\n #sortTabularGridColumnCallback = (\n e: CustomEvent<TabularGridColumnSortChangedEvent>\n ) => {\n const columnId = e.detail.columnId;\n\n let objectProperty;\n let dateType: SortTabularGridColumnDataType = \"string\";\n if (columnId === COLUMNS_IDS.lastSynchronized) {\n dateType = \"dateString\";\n }\n\n this.pendingObjectsAfterActionFilter = [\n ...sortTabularGridColumn(\n e,\n this.pendingObjectsAfterActionFilter,\n dateType,\n objectProperty\n )\n ];\n this.ignoredObjectsAfterActionFilter = [\n ...sortTabularGridColumn(\n e,\n this.ignoredObjectsAfterActionFilter,\n dateType,\n objectProperty\n )\n ];\n };\n\n /**\n * WA: Ignored objects must always remain unchecked.\n * Because `tabular-grid` selects all rows when the checkbox column is toggled,\n * we need to manually unselect the ignored IDs. // TODO: Move this function\n * to common\n */\n #columnSelectorClickedCallback = async (\n e: CustomEvent<TabularGridColumnSelectorClickedEvent>\n ) => {\n const allRowsChecked = e.detail;\n if (allRowsChecked) {\n const markedRowsIds =\n await this.#chGridPendingForUpdateEl.getMarkedRows();\n const ignoredMarkedRowsIds = markedRowsIds.filter(rowId => {\n return this.ignoredIdsSet.has(rowId);\n });\n if (ignoredMarkedRowsIds.length) {\n uncheckIgnoredObjects(\n ignoredMarkedRowsIds,\n this.#chGridPendingForUpdateEl\n );\n }\n }\n };\n\n render() {\n const disableControls =\n this.updating || this.loading || this.isUpdateDisabled;\n const gridIsEmpty =\n this.pendingObjectsAfterActionFilter.length === 0 &&\n this.ignoredObjectsAfterActionFilter.length === 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header spacing-body-inline spacing-body-block-start\">\n <div\n // header details\n class=\"header__detail header__detail-1\"\n >\n <p class=\"detail__heading-genexus-server subtitle-semi-bold-s\">\n {this.#componentLocale.commitDetail.title}\n </p>\n <div\n // genexus server\n class=\"detail__genexus-server field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.genexusServer}\n </span>\n <button\n class=\"detail__link body-regular-s\"\n onClick={this.openServerCallback}\n >\n {this.updateFrom ? this.updateFrom.serverUrl : \"\"}\n </button>\n </div>\n\n <div\n // knowledge base\n class=\"detail__knowledge-base field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.knowledgeBase}\n </span>\n <p class=\"body-regular-s\">\n {this.updateFrom ? this.updateFrom.kbName : \"\"}\n </p>\n </div>\n\n <div\n // version\n class=\"detail__version field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.version}\n </span>\n <p class=\"body-regular-s\">\n {this.updateFrom ? this.updateFrom.versionName : \"\"}\n </p>\n </div>\n\n <div\n // last full update\n class=\"detail__last-full-update field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.lastFullUpdate}\n </span>\n <p class=\"body-regular-s\">\n {formatDate(this.updateFrom.lastFullUpdate)}\n </p>\n </div>\n </div>\n </header>\n\n <div class=\"filter-container spacing-body-inline\">\n <div class=\"filter\">\n <ch-edit\n // search\n class=\"input filter__search\"\n disabled={disableControls}\n startImgSrc={SEARCH_ICON}\n accessibleName={\n this.#componentLocale.filter.searchAccessibleName\n }\n placeholder={this.#componentLocale.filter.searchPlaceholder}\n type=\"search\"\n onInput={this.#searchInputHandler}\n debounce={config.inputDebounce}\n ></ch-edit>\n\n <ch-combo-box-render\n // types\n class=\"combo-box filter__types\"\n disabled={disableControls}\n model={this.typesComboBoxModel}\n value={this.selectedType}\n accessibleName={this.#componentLocale.filter.typeAccesibleName}\n placeholder={this.#componentLocale.filter.typePlaceholder}\n onInput={this.#typeChangedHandler}\n ></ch-combo-box-render>\n\n <ch-combo-box-render\n // actions\n class=\"combo-box filter__actions\"\n disabled={disableControls}\n model={this.#actionsComboBoxModel}\n value={this.selectedAction}\n onInput={this.#actionChangedHandler}\n accessibleName={\n this.#componentLocale.filter.actionAccesibleName\n }\n placeholder={this.#componentLocale.filter.actionPlaceholder}\n ></ch-combo-box-render>\n\n <ch-checkbox\n // kb properties\n class=\"checkbox filter__kb-properties\"\n caption={this.#componentLocale.filter.kbProperties}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n value={CHECKBOX_UNCHECKED_VALUE}\n onInput={this.#kbPropertiesChangedHandler}\n disabled={disableControls}\n />\n\n <div class=\"buttons-spacer filter__buttons\">\n <button\n // reload button\n class=\"button-secondary button-icon-and-text\"\n disabled={disableControls}\n onClick={this.#reloadClickedHandler}\n >\n <ch-image class=\"icon-md\" src={REFRESH_ICON}></ch-image>\n {this.#componentLocale.filter.reload}\n </button>\n <button\n // update button\n class=\"button-primary button-update\"\n disabled={!this.atLeastOneObjectIsChecked || disableControls}\n onClick={this.#updateCheckedClickedHandler}\n >\n {this.#componentLocale.filter.update}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"main spacing-body\">\n {!this.loading ? (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"objects-tabular-grid\": true,\n \"disabled-custom-selector\": this.updating,\n \"empty-result\": gridIsEmpty\n }}\n keyboardNavigationMode=\"focus\"\n rowSelectionMode=\"multiple\"\n onRowMarkingChanged={this.#rowMarkingChangedHandler}\n onRowContextMenu={this.#onRowContextMenuHandler()}\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridPendingForUpdateEl = el)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.name}\n columnName={this.#componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={!this.allPendingAreUpdated}\n richRowSelectorMode=\"mark\"\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n onColumnSelectorClicked={\n this.#columnSelectorClickedCallback\n }\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.type}\n columnName={this.#componentLocale.objects.type}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.description}\n columnName={this.#componentLocale.objects.description}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size={config.tabularGrid.colSize.description}\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.modifiedOn}\n columnName={this.#componentLocale.objects.modifiedOn}\n settingable={false}\n sortable={true}\n onColumnSortChanged={this.#sortTabularGridColumnCallback}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.action}\n columnName={this.#componentLocale.objects.action}\n settingable={false}\n sortable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n // size of this column should the enough for the largest pill, and no more.\n // this prevents layout shifts when pills state changes.\n class=\"tabular-grid-column\"\n columnId={COLUMNS_IDS.status}\n columnName={this.#componentLocale.objects.status}\n settingable={false}\n sortable={false}\n size=\"100px\"\n />\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty\n ? [\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.pending}\n </ch-tabular-grid-rowset-legend>\n {this.#renderRows(\"pending\")}\n </ch-tabular-grid-rowset>,\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-legend class=\"tabular-grid-rowset-legend\">\n {this.#componentLocale.objects.ignored}\n </ch-tabular-grid-rowset-legend>\n {this.#renderRows(\"ignored\")}\n </ch-tabular-grid-rowset>\n ]\n : null}\n\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {gridIsEmpty && (\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n class=\"empty-state\"\n isAnimated\n stateIconSrc={FILTER_ICON}\n stateTitle=\"No object matched your filter\"\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n )}\n </ch-tabular-grid-rowset>\n </ch-tabular-grid>\n ) : (\n <gx-ide-loader\n cancelLabel={this.#componentLocale.loader.cancelLabel}\n loaderTitle={this.#componentLocale.loader.title}\n description={this.#componentLocale.loader.description}\n show\n class=\"loader\"\n ></gx-ide-loader>\n )}\n </div>\n </section>\n </Host>\n );\n }\n}\n\n// - - - - - - - - - - - - -\n// Types from Update\n// - - - - - - - - - - - - -\n\nexport type ContextMenuCallback = (\n source: UpdateSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type PendingItemsCheckedCallback = (\n pendingItemsCheckedState: ItemsCheckedState\n) => Promise<ItemsCheckedResult | undefined>;\n\nexport type UpdateSourceType = \"pending\" | \"ignored\";\n\nexport interface UpdateFromData {\n serverUrl: string;\n kbName: string;\n versionName: string;\n lastFullUpdate: Date;\n}\n\nexport interface MessageData {\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n text: string;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,mCACXC,KAEAA,EAAgBC,KAAIC,MAAU;EAC5BC,OAAOD,EAAWE;EAClBC,SAASH,EAAWI;EACpBC,aAAaL,EAAWM;;;ACT5B,MAAMC,IAAY;;;;;;;;;;;;;;;;;ACoDlB,MAAMC,IAA8B,EAClC,qBACA,2BACA,oBACA,gBACA,oBACA,iBACA;;AAGF,MAAMC,IAAyB;;AAC/B,MAAMC,IAA2B;;AAEjC,MAAMC,IAAuB;;QAG7B;MAAMC,IAAWC,EAAY;EAC3BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMC,IAAcH,EAAY;EAC9BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAME,IAAcJ,EAAY;EAC9BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMG,IAAcL,EAAY;EAC9BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMI,IAAiBN,EAAY;EACjCC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMK,IAAeP,EAAY;EAC/BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMM,IAAaR,EAAY;EAC7BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMO,IAAeT,EAAY;EAC/BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMQ,KAAYV,EAAY;EAC5BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;AAEb,MAAMS,KAAeX,EAAY;EAC/BC,UAAU;EACVV,MAAM;EACNW,WAAW;;;MASAU,KAAkB;;;;;;;QAK7BC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,WAAA;;;;;eAOAE,EAAAH,IAAAC,MAAuC;IAIvCG,EAAAJ,IAAAC,WAAA;IA6QAI,EAAAL,IAAAC,OAA+BK;MAC7BC,EAAAN,MAAIO,GAAA,KAAsBC,KAA1BR,MAA2B,KAAIA,KAAKS;AAAkB;IAGxDC,EAAAX,IAAAC,OAAwBK;MACtBC,EAAAN,MAAIW,GAAA,KAAUH,KAAdR,MAAe;AAAK;IAGtBO,EAAAR,IAAAC,OAAwBK,MAAOO;MAC7BZ,KAAKa,WAAW;MAEhBD,EAAUE,SAAQC;QAChBf,KAAKgB,iBAAiBjB,IAAIgB,GAAc;AAAW;MAGrD,MAAME,UAAqBjB,KAAKkB,eAAeN;MAC/CK,EAAaH,SAAQT,MAAMc;QACzB,MAAMC,IAAWD,EAAaC;QAC9B,IAAIA,EAASC,QAAQ;UACnBrB,KAAKsB,uBAAuBvB,IAAIoB,EAAa7C,IAAI6C,EAAaC;eACzD;;UAELpB,KAAKsB,uBAAuBC,OAAOJ,EAAa7C;;QAElD,IAAI6C,EAAaK,WAAW,WAAW;UACrCxB,KAAKyB,8BAA8B,IAAIC,IACrC1B,KAAKyB,6BACLE,IAAIR,EAAa7C;UAEnB0B,KAAKgB,iBAAiBjB,IAAIoB,EAAa7C,IAAI;gBACrCgC,EAAAN,MAAIG,GAAA,KAA2ByB,QAAQT,EAAa7C,IAAI;eACzD;UACL0B,KAAKgB,iBAAiBjB,IAAIoB,EAAa7C,IAAI;;;MAG/C0B,KAAKa,WAAW;AAAK;IAGvBgB,EAAA9B,IAAAC,OACE8B;MAEA,IAAIpD;MACJ,IAAIH;MACJ,IAAIwD;MAEJ,IAAID,MAAW,WAAW;QACxBpD,IAAOa;QACPhB,IAAU+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQT;QACxCQ,IAAY;aACP,IAAID,MAAW,YAAY;QAChCpD,IAAOM;QACPT,IAAU+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQC;QACxCF,IAAY;aACP,IAAID,MAAW,YAAY;QAChCpD,IAAOU;QACPb,IAAU+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQE;QACxCH,IAAY;aACP,IAAID,MAAW,2BAA2B;QAC/CpD,IAAOc;QACPjB,IAAU+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQG;QACxCJ,IAAY;aACP,KAAKD,GAAQ;;QAElB,OAAO;;MAGT,OACEM,EAAA;QAAMC,OAAM;SACVD,EAAA;QACEE,MAAK;QACLD,OAAM;QACNE,KAAK7D;QACL8D,OAAO;UAAEC,iBAAiB,OAAOV;;UAElC,GAAGxD;AACC;IAIXmE,EAAA3C,IAAAC,OACE2C,KAAYtC;MACV,MAAMuC,IAAsB,IAAIC,IAAI7C,KAAKgB;MACzC4B,EAAoB7C,IAAI4C,GAAU;MAClC3C,KAAKgB,mBAAmB4B;MACxBtC,EAAAN,MAAIO,GAAA,KAAsBC,KAA1BR,MAA2B,EAAC2C;AAAU;IAG1CG,EAAA/C,IAAAC,OAAuB2C;MACrB,MAAMI,IAAS/C,KAAKgB,iBAAiBgC,IAAIL;MAEzC,MAAMpE,IACJwE,MAAW,aAAa/C,KAAKiD,qBACzB3C,EAAAN,MAAIF,GAAA,KAAkBiD,OAAOG,SAC7B5C,EAAAN,MAAIF,GAAA,KAAkBiD,OAAOA;MACnC,IAAIA,MAAW,YAAY;QACzB,OAAOX,EAAA;UAAMC,OAAM;WAA4B9D;;MAEjD,MAAM4E,IAAU,cAAcJ;MAC9B,IAAI/C,KAAKiD,sBAAsBF,MAAW,WAAW;QACnD,OACEX,EAAA;UACEC,OAAM;UACNe,SAAS9C,EAAAN,MAAI0C,GAAA,KAAoBlC,KAAxBR,MAAyB2C;WAEjCpE;aAGA;QACL,OAAO6D,EAAA;UAAMC,OAAOc;WAAU5E;;;IAIlC8E,EAAAtD,IAAAC,OAAesC;MACb,IAAIgB;MACJ,IAAIhB,MAAS,WAAW;QACtBgB,IAAUtD,KAAKuD;aACV,IAAIjB,MAAS,WAAW;QAC7BgB,IAAUtD,KAAKwD;;MAGjB,OAAOF,EAAQnF,KAAIsF;QACjB,MAAMrF,IAAyB;UAC7BE,IAAImF,EAAOnF;UACXI,MAAM+E,EAAOC;UACblF,MAAMiF,EAAOnB;;QAGf,MAAMqB,IAAiB3D,KAAKyB,4BAA4BmC,IAAIH,EAAOnF;QACnE,MAAMuF,IAAeF,KAAkBrB,MAAS;QAEhD,MAAMwB,IAAS9D,KAAKS,iBAAiBmD,IAAIH,EAAOnF;QAEhD,MAAM8C,IAAWpB,KAAKsB,uBAAuB0B,IAAIS,EAAOnF;QAExD,OACE8D,EAAA;UACEC,OAAM;UACN0B,KAAKN,EAAOnF;UACZ0F,OAAOP,EAAOnF;UACd2F,KAAMC,KACJJ,MAAUI,MAAE,QAAFA,WAAE,aAAFA,EAAIC,aAAa,UAAU;WAGvC/B,EAAA;UAAA,aACY;UAAM,gBACH;UACbC,OAAO;YACL,qBAAqB;YACrB,+BAA+BwB;;UAEjCO,MAAK;WAEJX,EAAOjF,OAEV4D,EAAA;UAAsBC,OAAM;WACzBgC,EAAyBjG,KAE5BgE,EAAA;UAAsBC,OAAM;WACzBoB,EAAOa,cAEVlC,EAAA;UAAsBC,OAAM;WACzBkC,EAAWd,EAAOe,cAErBpC,EAAA;UAAsBC,OAAM;WACzB/B,EAAAN,MAAI6B,GAAA,KAAyBrB,KAA7BR,MAA8ByD,EAAO3B,UAExCM,EAAA;UAAsBC,OAAM;WACzB/B,EAAAN,MAAI8C,GAAA,KAAoBtC,KAAxBR,MAAyByD,EAAOnF,OAGlC8C,MAAQ,QAARA,WAAQ,aAARA,EAAUC,WACTe,EAAA;UAAwBC,OAAM;WAC5BD,EAAA;UACEC,OAAO;YACL,6BAA6B;;WAG/BD,EAAA;UAAIC,OAAM;WACPjB,EAASjD,KAAIsG;UACZ,IAAIC;UACJ,IAAID,EAAQnC,SAAS,SAAS;YAC5BoC,IAAejF;iBACV,IAAIgF,EAAQnC,SAAS,WAAW;YACrCoC,IAAelF;iBACV,IAAIiF,EAAQnC,SAAS,WAAW;YACrCoC,IAAehF;iBACV;;YAELgF,IAAe/E;;UAGjB,OACEyC,EAAA;YAAIC,OAAM;aACRD,EAAA;YACEC,OAAM;YACNE,KAAKmC;cAEND,EAAQE;AACN;AAOG;AAExB;IAGJC,EAAA7E,IAAAC,OAA4BK,MAC1BwE;MAEA,MAAMC,IAAgBD,EAAME,OAAOC;MACnChF,KAAKS,mBAAmB,IAAIiB,IAC1BoD,EAAcG,QACZC,MAAmBlF,KAAKyB,4BAA4BmC,IAAIsB;MAI5D,IAAI5E,EAAAN,MAAIE,GAAA,MAA8B;QACpCI,EAAAN,MAAImF,GAAA,KAA2B3E,KAA/BR,MAAgC6E;;;IAIpCM,EAAApF,IAAAC,OAA6BK,MAC3BwE;MAEAO,EAAApF,MAAIE,GAA+B,OAAK;MACxC,MAAMmF,IAAeR,EAAME,OAAOO;MAClC,MAAMC,IAAgBV,EAAME,OAAOQ;MACnC;QACE,MAAMC,UAAiCxF,KAAKyF,4BAA4B;UACtEC,cAAcL;UACdM,gBAAgBJ;;QAGlB,IAAIC,MAA6BI,WAAW;;gBAEpCtF,EAAAN,MAAI6F,GAAA,KAAgCrF,KAApCR,MAAqCqF,GAAcE;eACpD;gBACCjF,EAAAN,MAAI8F,GAAA,KAAgCtF,KAApCR,MAAqCwF;;QAE7C,OAAAO;;;QAGAX,EAAApF,MAAIE,GAA+B,MAAI;;;IAI3C8F,EAAAjG,IAAAC,OAAuB6E;MACrB7E,KAAKiG,cAAcpB,EAAME;MACzBzE,EAAAN,MAAIW,GAAA,KAAUH,KAAdR;AAAgB;;QAKlBkG,EAAAnG,IAAAC,OAAyB6E;MACvB7E,KAAKmG,iBAAiBtB,EAAME;MAC5BzE,EAAAN,MAAIW,GAAA,KAAUH,KAAdR;AAAgB;IAGlBoG,EAAArG,IAAAC,OAAsBK,MAAOwE;MAC3B7E,KAAKqG,eAAexB,EAAME;MAC1BzE,EAAAN,MAAIW,GAAA,KAAUH,KAAdR;AAAgB;IAGlBsG,EAAAvG,IAAAC,OAA2B;MACzBA,KAAKuG,kBAAkBC,iBAAiB1F,SAAQ2F;;QAC9C,MAAM1D,KACJgD,IAACU,EAAc1D,YAAuB,QAAAgD,WAAA,IAAAA,IAAI;QAE5C/F,KAAKgB,iBAAiBjB,IAAI0G,EAAcnI,IAAIyE;QAC5C,IAAIA,MAAW,WAAW;UACxB/C,KAAKyB,4BAA4BE,IAAI8E,EAAcnI;;;MAGvD0B,KAAKuG,kBAAkBG,eAAe5F,SAAQ6F;;QAC5C,MAAM5D,KACJgD,IAACY,EAAc5D,YAAuB,QAAAgD,WAAA,IAAAA,IAAI;QAC5C/F,KAAKgB,iBAAiBjB,IAAI4G,EAAcrI,IAAIyE;AAAO;AACnD;IAGJpC,EAAAZ,IAAAC,OAAYK,OAAOuG,IAAqB;MACtC,MAAMC,IAA6B;QACjCC,QAAQ9G,KAAKiG;QACb3D,MAAMtC,KAAKqG;QACXU,cAAc/G,KAAKgH;QACnBlF,QAAQ9B,KAAKmG;;MAGf;QACEnG,KAAKiH,UAAU;QACfjH,KAAKsB,uBAAuB4F;QAE5BlH,KAAKuG,0BAA0BvG,KAAKmH,aAAaN,GAASD;QAC1DtG,EAAAN,MAAIsG,GAAA,KAAyB9F,KAA7BR;;gBAGAM,EAAAN,MAAIoH,GAAA,KAAoB5G,KAAxBR;QACA,OAAOqH;;;QAGPrH,KAAKiH,UAAU;;;;;;;;;gBAWnBG,EAAArH,IAAAC,OAAsB;MACpB,KAAK,MAAMsH,KAAatH,KAAKuH,eAAe;QAC1C,KAAKvH,KAAKyB,4BAA4BmC,IAAI0D,IAAY;UACpDtH,KAAKS,mBAAmB,IAAIiB,IAAI,KAAI1B,KAAKS,kBAAkB6G;;;;IAKjEE,EAAAzH,IAAAC,OAAqB;;;;MAInBA,KAAKuD,kCACHvD,KAAKuG,kBAAkBC;;;;YAIzBxG,KAAKwD,kCACHxD,KAAKuG,kBAAkBG;AAAc;;;;;;;;;;;;;;;;;QAwBzCe,EAAA1H,IAAAC,OACE,MAAMK,MAAOqH;MACXA,EAAGC;MACHD,EAAGE;MAEH,MAAMhH,UAAkBN,EAAAN,MAAIG,GAAA,KAA2B0H;MAEvD,MAAMC,WACExH,EAAAN,MAAIG,GAAA,KAA2B4H,mBACrCC;MAEF,MAAMC,IAA2BjI,KAAKuH,cAAc3D,IAAIkE,KACpD,YACA;MAEJ,IAAII,IAA8B;;YAElC,IAAItH,EAAUS,SAAS,KAAK4G,MAAW,WAAW;QAChDrH,EAAUE,SAAQT,MAAMyH;UACtB,IAAI9H,KAAKmI,cAAcvE,IAAIkE,IAAgB;kBACnCxH,EAAAN,MAAIG,GAAA,KAA2BiI,UACnCN,GACA;iBAEG;YACLI,EAAkBG,KAAKP;;;aAGtB,IAAIlH,EAAUS,SAAS,KAAK4G,MAAW,WAAW;QACvDrH,EAAUE,SAAQT,MAAMyH;UACtB,IAAI9H,KAAKuH,cAAc3D,IAAIkE,IAAgB;kBACnCxH,EAAAN,MAAIG,GAAA,KAA2BiI,UACnCN,GACA;iBAEG;YACLI,EAAkBG,KAAKP;;;aAGtB;QACLI,IAAoBtH;;YAGhBZ,KAAKsI,oBAAoBL,GAAQ;QACrCrH,WAAWsH;QACXK,SAASb,EAAG3C,OAAOwD;QACnBC,SAASd,EAAG3C,OAAOyD;;AACnB;IAGN3C,EAAA9F,IAAAC,OAAkCK,OAChCgF,GACAE;MAEA,IAAIjF,EAAAN,MAAIG,GAAA,MAA4B;QAClC,KAAK,MAAM6H,KAAS3C,GAAc;gBAC1B/E,EAAAN,MAAIG,GAAA,KAA2ByB,QAAQoG,GAAO;;QAEtD,KAAK,MAAMA,KAASzC,GAAe;gBAC3BjF,EAAAN,MAAIG,GAAA,KAA2ByB,QAAQoG,GAAO;;;;IAK1DlC,EAAA/F,IAAAC,OAAkCK,MAChCoI;MAEA,IAAInI,EAAAN,MAAIG,GAAA,MAA4B;QAClC,MAAMuI,IAAyBD,EAAcC;QAC7C,MAAMC,IAA2BF,EAAcE;;gBAE/C,KAAK,MAAMX,KAASU,GAAc;gBAC1BpI,EAAAN,MAAIG,GAAA,KAA2ByB,QAAQoG,GAAO;;;gBAGtD,KAAK,MAAMA,KAASW,GAAgB;gBAC5BrI,EAAAN,MAAIG,GAAA,KAA2ByB,QAAQoG,GAAO;;;;IAK1DY,EAAA7I,IAAAC,OACE6E;MAEA7E,KAAKgH,sBAAsBnC,EAAME,WAAWlG;MAC5CyB,EAAAN,MAAIW,GAAA,KAAUH,KAAdR,MAAe;AAAK;IAGtB6I,EAAA9I,IAAAC,OACE8I;MAEA,MAAMC,IAAWD,EAAE/D,OAAOgE;MAE1B,IAAIC;MACJ,IAAIC,IAA0C;MAC9C,IAAIF,MAAaG,EAAYC,kBAAkB;QAC7CF,IAAW;;MAGbjJ,KAAKuD,kCAAkC,KAClC6F,EACDN,GACA9I,KAAKuD,iCACL0F,GACAD;MAGJhJ,KAAKwD,kCAAkC,KAClC4F,EACDN,GACA9I,KAAKwD,iCACLyF,GACAD;AAEH;;;;;;eASHK,EAAAtJ,IAAAC,OAAiCK,MAC/ByI;MAEA,MAAMQ,IAAiBR,EAAE/D;MACzB,IAAIuE,GAAgB;QAClB,MAAMxE,UACExE,EAAAN,MAAIG,GAAA,KAA2BoJ;QACvC,MAAMC,IAAuB1E,EAAcG,QAAO+C,KACzChI,KAAKmI,cAAcvE,IAAIoE;QAEhC,IAAIwB,EAAqBnI,QAAQ;UAC/BoI,EACED,GACAlJ,EAAAN,MAAIG,GAAA;;;;qCAjvBkC;mBAKlB;;uBAUG;0BAKY;4BAKF,IAAIuB,IAAY;uCASL,IAAIA,IAAY;yBAiB9B,IAAIA,IAAY;yBAOhB,IAAIA,IAAY;kCAKQ,IAAImB;oBAKrC;gCAUY;+BAKD;;;4BAeH;4BAK0B,IAAIA;;6BA0B1B;MACvC2D,kBAAkB;MAClBE,gBAAgB;;2CA2B2C;2CAKA;;;;8BAoBd;;;;;EA5J/C,uBAAAgD,CAAwBC;IACtB3J,KAAK4J,4BAA4BD,EAAoBvF,OAAO;;EAQ9D,kCAAAyF,CAAmCC;IACjC,MAAMC,IAAwCC,EAC5CF,GACA9J,KAAKuH;IAGPvH,KAAKiK,uBACHF,KAAyC/J,KAAKuH,cAAcnD,OAAO;;EA8DvE,uBAAA8F,CACEC;IAEA,MAAMC,IAAuB,KAAID,EAAoBE,YAAWC,MAC9D,EAAC,EAAGC,OAAWA,MAAU;IAG3B,KAAKH,GAAsB;MACzBpK,KAAKa,WAAW;;;EAqBpB,wBAAA2J;IACExK,KAAKuH,cAAcL;;QACnBlH,KAAKmI,cAAcjB;;QACnBlH,KAAKsB,yBAAyB,IAAIuB;IAClC7C,KAAKyB,8BAA8B,IAAIC;IACvC1B,KAAKS,mBAAmB,IAAIiB;;QAE5B1B,KAAKuG,kBAAkBC,iBAAiB1F,SAAQ2J;MAC9CzK,KAAKuH,cAAc5F,IAAI8I,EAAQnM;AAAG;IAGpC0B,KAAKuG,kBAAkBG,eAAe5F,SAAQ4J;MAC5C1K,KAAKmI,cAAcxG,IAAI+I,EAAQpM;AAAG;IAGpCgC,EAAAN,MAAIoH,GAAA,KAAoB5G,KAAxBR;;QACAM,EAAAN,MAAIsG,GAAA,KAAyB9F,KAA7BR;;QAEAM,EAAAN,MAAIwH,GAAA,KAAmBhH,KAAvBR;;EAoDF,uBAAM2K;;IACJvF,EAAApF,MAAIF,SAA0B8K,EAAOC,oBAAoB7K,KAAKkE,KAAG;;QAGjEkB,EAAApF,MAAIC,GAAyB,EAC3B;MACE1B,SAAS+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQ8I;MACvCzM,OAAO;OAET;MACEE,SAAS+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQC;MACvC5D,OAAO;OAET;MACEE,SAAS+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQE;MACvC7D,OAAO;OAET;MACEE,SAAS+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQG;MACvC9D,OAAO;OAET;MACEE,SAAS+B,EAAAN,MAAIF,GAAA,KAAkBkC,QAAQT;MACvClD,OAAO;SAEV;;QAGD2B,KAAKqG,gBAAeN,IAAA/F,KAAK+K,MAAM,QAAE,QAAAhF,WAAA,aAAAA,EAAEzH;IAEnC0B,KAAKgL,qBAAqB/M,iCAAiC+B,KAAK+K;;EAGlE,sBAAME;UACE3K,EAAAN,MAAIW,GAAA,KAAUH,KAAdR,MAAe;;QAGrBA,KAAK6J,mCAAmC7J,KAAKyB;;;;SAO/C,YAAMyJ;UACE5K,EAAAN,MAAIW,GAAA,KAAUH,KAAdR,MAAe;;;;SAOvB,mBAAMmL,CAAc9M;IAClB2B,KAAKoL,mBAAmB/M;;EAsf1B,MAAAgN;IACE,MAAMC,IACJtL,KAAKa,YAAYb,KAAKiH,WAAWjH,KAAKoL;IACxC,MAAMG,IACJvL,KAAKuD,gCAAgClC,WAAW,KAChDrB,KAAKwD,gCAAgCnC,WAAW;IAElD,OACEe,EAACoJ,GAAI;MAACnJ,OAAM;OACVD,EAAA;MAAUqJ,OAAO7M;QACjBwD,EAAA;MAASC,OAAM;OACbD,EAAA;MAAQC,OAAM;OACZD,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAGC,OAAM;OACN/B,EAAAN,MAAIF,GAAA,KAAkB4L,aAAaC,QAEtCvJ,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAMC,OAAOtD;OACVuB,EAAAN,MAAIF,GAAA,KAAkB4L,aAAaE,gBAEtCxJ,EAAA;MACEC,OAAM;MACNe,SAASpD,KAAK6L;OAEb7L,KAAK8L,aAAa9L,KAAK8L,WAAWC,YAAY,MAInD3J,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAMC,OAAOtD;OACVuB,EAAAN,MAAIF,GAAA,KAAkB4L,aAAaM,gBAEtC5J,EAAA;MAAGC,OAAM;OACNrC,KAAK8L,aAAa9L,KAAK8L,WAAWG,SAAS,MAIhD7J,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAMC,OAAOtD;OACVuB,EAAAN,MAAIF,GAAA,KAAkB4L,aAAaQ,UAEtC9J,EAAA;MAAGC,OAAM;OACNrC,KAAK8L,aAAa9L,KAAK8L,WAAWK,cAAc,MAIrD/J,EAAA;;MAEEC,OAAM;OAEND,EAAA;MAAMC,OAAOtD;OACVuB,EAAAN,MAAIF,GAAA,KAAkB4L,aAAaU,iBAEtChK,EAAA;MAAGC,OAAM;OACNkC,EAAWvE,KAAK8L,WAAWM,qBAMpChK,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNgK,UAAUf;MACV7M,aAAaa;MACbgN,gBACEhM,EAAAN,MAAIF,GAAA,KAAkBmF,OAAOsH;MAE/BC,aAAalM,EAAAN,MAAIF,GAAA,KAAkBmF,OAAOwH;MAC1CnK,MAAK;MACLoK,SAASpM,EAAAN,MAAIgG,GAAA;MACb2G,UAAUC,EAAOC;QAGnBzK,EAAA;;MAEEC,OAAM;MACNgK,UAAUf;MACVG,OAAOzL,KAAKgL;MACZ3M,OAAO2B,KAAKqG;MACZiG,gBAAgBhM,EAAAN,MAAIF,GAAA,KAAkBmF,OAAO6H;MAC7CN,aAAalM,EAAAN,MAAIF,GAAA,KAAkBmF,OAAO8H;MAC1CL,SAASpM,EAAAN,MAAIoG,GAAA;QAGfhE,EAAA;;MAEEC,OAAM;MACNgK,UAAUf;MACVG,OAAOnL,EAAAN,MAAIC,GAAA;MACX5B,OAAO2B,KAAKmG;MACZuG,SAASpM,EAAAN,MAAIkG,GAAA;MACboG,gBACEhM,EAAAN,MAAIF,GAAA,KAAkBmF,OAAO+H;MAE/BR,aAAalM,EAAAN,MAAIF,GAAA,KAAkBmF,OAAOgI;QAG5C7K,EAAA;;MAEEC,OAAM;MACN9D,SAAS+B,EAAAN,MAAIF,GAAA,KAAkBmF,OAAO8B;MACtCmG,cAAcrO;MACdR,OAAOS;MACP4N,SAASpM,EAAAN,MAAI4I,GAAA;MACbyD,UAAUf;QAGZlJ,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNgK,UAAUf;MACVlI,SAAS9C,EAAAN,MAAIU,GAAA;OAEb0B,EAAA;MAAUC,OAAM;MAAUE,KAAK3C;QAC9BU,EAAAN,MAAIF,GAAA,KAAkBmF,OAAOiG,SAEhC9I,EAAA;;MAEEC,OAAM;MACNgK,WAAWrM,KAAK4J,6BAA6B0B;MAC7ClI,SAAS9C,EAAAN,MAAII,GAAA;OAEZE,EAAAN,MAAIF,GAAA,KAAkBmF,OAAO/B,YAMtCd,EAAA;MAAKC,OAAM;QACPrC,KAAKiH,UACL7E,EAAA;MACEC,OAAO;QACL,gBAAgB;QAChB,wBAAwB;QACxB,4BAA4BrC,KAAKa;QACjC,gBAAgB0K;;MAElB4B,wBAAuB;MACvBC,kBAAiB;MACjBC,qBAAqB/M,EAAAN,MAAI4E,GAAA;MACzB0I,kBAAkBhN,EAAAN,MAAIyH,GAAA,KAAyBjH,KAA7BR;MAClBiE,KAAMC,KACHkB,EAAApF,MAAIG,GAA6B+D,GAAE;OAGtC9B,EAAA;MAA2BC,OAAM;OAC/BD,EAAA;MACEC,OAAM;MACN0G,UAAUG,EAAY1K;MACtB+O,YAAYjN,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQ9E;MAC1CgP,YAAW;MACXC,kBAAkBzN,KAAKiK;MACvByD,qBAAoB;MACpBC,aAAa;MACbC,UAAU;MACVC,qBAAqBvN,EAAAN,MAAI6I,GAAA;MACzBiF,yBACExN,EAAAN,MAAIqJ,GAAA;MAENjF,MAAK;QAEPhC,EAAA;MACEC,OAAM;MACN0G,UAAUG,EAAY5G;MACtBiL,YAAYjN,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQhB;MAC1CqL,aAAa;MACbC,UAAU;MACVC,qBAAqBvN,EAAAN,MAAI6I,GAAA;MACzBzE,MAAK;QAEPhC,EAAA;MACEC,OAAM;MACN0G,UAAUG,EAAY5E;MACtBiJ,YAAYjN,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQgB;MAC1CqJ,aAAa;MACbC,UAAU;MACVC,qBAAqBvN,EAAAN,MAAI6I,GAAA;MACzBzE,MAAMwI,EAAOmB,YAAYC,QAAQ1J;QAEnClC,EAAA;MACEC,OAAM;MACN0G,UAAUG,EAAY1E;MACtB+I,YAAYjN,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQkB;MAC1CmJ,aAAa;MACbC,UAAU;MACVC,qBAAqBvN,EAAAN,MAAI6I,GAAA;MACzBzE,MAAK;QAEPhC,EAAA;MACEC,OAAM;MACN0G,UAAUG,EAAYpH;MACtByL,YAAYjN,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQxB;MAC1C6L,aAAa;MACbC,UAAU;MACVxJ,MAAK;QAEPhC,EAAA;;;MAGEC,OAAM;MACN0G,UAAUG,EAAYnG;MACtBwK,YAAYjN,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQP;MAC1C4K,aAAa;MACbC,UAAU;MACVxJ,MAAK;UAIPmH,IACE,EACEnJ,EAAA;MAAwBC,OAAM;OAC5BD,EAAA;MAA+BC,OAAM;OAClC/B,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQmH,UAEhCnK,EAAAN,MAAIqD,GAAA,KAAY7C,KAAhBR,MAAiB,aAEpBoC,EAAA;MAAwBC,OAAM;OAC5BD,EAAA;MAA+BC,OAAM;OAClC/B,EAAAN,MAAIF,GAAA,KAAkBwD,QAAQoH,UAEhCpK,EAAAN,MAAIqD,GAAA,KAAY7C,KAAhBR,MAAiB,gBAGtB,MAEJoC,EAAA;MAAwBC,OAAM;OAC3BkJ,KACCnJ,EAAA,sCACEA,EAAA;MACEC,OAAM;MACN4L,YAAU;MACVC,cAAc7O;MACd8O,YAAW;YAOrB/L,EAAA;MACEgM,aAAa9N,EAAAN,MAAIF,GAAA,KAAkBuO,OAAOD;MAC1CE,aAAahO,EAAAN,MAAIF,GAAA,KAAkBuO,OAAO1C;MAC1CrH,aAAahE,EAAAN,MAAIF,GAAA,KAAkBuO,OAAO/J;MAC1CiK,MAAI;MACJlM,OAAM"}
@@ -46,6 +46,10 @@ export declare class GxIdeTeamDevPreview {
46
46
  * Indicates if the update process is ongoing
47
47
  */
48
48
  updatingChanges: boolean;
49
+ /**
50
+ * Indicates if the server operations (commit/update) should be disabled
51
+ */
52
+ serverOperationsDisabled: boolean;
49
53
  /**
50
54
  * Data required to render the Team Dev Preview
51
55
  */
@@ -93,6 +97,10 @@ export declare class GxIdeTeamDevPreview {
93
97
  * Used by the host to reload remote or local changes
94
98
  */
95
99
  reloadChanges(type: TeamDevPreviewMode): Promise<void>;
100
+ /**
101
+ * Used by the host to instruct the component to disable the commit/update button.
102
+ */
103
+ disableServerOperations(value: boolean): Promise<void>;
96
104
  private getEmptyStateType;
97
105
  render(): any;
98
106
  }
@@ -71,6 +71,10 @@ export declare class GxIdeTeamDevUpdate {
71
71
  * The selected type
72
72
  */
73
73
  selectedType: string;
74
+ /**
75
+ * Indicates if the update button should be disabled
76
+ */
77
+ isUpdateDisabled: boolean;
74
78
  /**
75
79
  * A map that holds the current update objects states ("inserted" | "modified" | "modified-with-conflicts" | "deleted" | "updating" | "update")
76
80
  */
@@ -127,6 +131,10 @@ export declare class GxIdeTeamDevUpdate {
127
131
  * Used by the host to instruct the component to force a data reload in the grids.
128
132
  */
129
133
  reload(): Promise<void>;
134
+ /**
135
+ * Used by the host to instruct the component to disable the update button.
136
+ */
137
+ disableUpdate(value: boolean): Promise<void>;
130
138
  render(): any;
131
139
  }
132
140
  export type ContextMenuCallback = (source: UpdateSourceType, contextMenuInfo: ContextMenuInfo) => Promise<void>;
@@ -132,6 +132,10 @@ export declare class GxIdeTeamDevCommit {
132
132
  * folder options as ComboBoxModel
133
133
  */
134
134
  foldersComboBoxModel: ComboBoxModel;
135
+ /**
136
+ * Indicates if the commit button should be disabled
137
+ */
138
+ isCommitDisabled: boolean;
135
139
  /**
136
140
  * Invoked when user starts the commit process
137
141
  */
@@ -189,5 +193,9 @@ export declare class GxIdeTeamDevCommit {
189
193
  * Used by the host to instruct the component to force a data reload in the grids.
190
194
  */
191
195
  reload(): Promise<void>;
196
+ /**
197
+ * Used by the host to instruct the component to disable the commit button.
198
+ */
199
+ disableCommit(value: boolean): Promise<void>;
192
200
  render(): any;
193
201
  }
@@ -21,6 +21,7 @@ export interface ModifiedObject {
21
21
  description?: string;
22
22
  modifiedOn?: Date;
23
23
  status?: UpdateStatus;
24
+ module: string;
24
25
  }
25
26
  export type Action = "inserted" | "modified" | "modified-with-conflicts" | "deleted";
26
27
  export type ActionForFilter = Action | "all-actions";
@@ -2339,6 +2339,10 @@ export namespace Components {
2339
2339
  * Invoked when user starts the commit process
2340
2340
  */
2341
2341
  "commitCallback": CommitCallback;
2342
+ /**
2343
+ * Used by the host to instruct the component to disable the commit button.
2344
+ */
2345
+ "disableCommit": (value: boolean) => Promise<void>;
2342
2346
  /**
2343
2347
  * "folder" options for the filter.
2344
2348
  */
@@ -2427,6 +2431,10 @@ export namespace Components {
2427
2431
  * Invoked to create a knowledge base from the server
2428
2432
  */
2429
2433
  "createKBFromServerCallback": () => Promise<void>;
2434
+ /**
2435
+ * Used by the host to instruct the component to disable the commit/update button.
2436
+ */
2437
+ "disableServerOperations": (value: boolean) => Promise<void>;
2430
2438
  /**
2431
2439
  * Invoked to return the list of local changes
2432
2440
  */
@@ -2487,6 +2495,10 @@ export namespace Components {
2487
2495
  * Callback invoked when user activates the context menu on any of the grids.
2488
2496
  */
2489
2497
  "contextMenuCallback": ContextMenuCallback2;
2498
+ /**
2499
+ * Used by the host to instruct the component to disable the update button.
2500
+ */
2501
+ "disableUpdate": (value: boolean) => Promise<void>;
2490
2502
  /**
2491
2503
  * Callback invoked to return the list of data types loaded from file or url.
2492
2504
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genexus/genexus-ide-ui",
3
3
  "license": "Apache-2.0",
4
- "version": "1.1.66",
4
+ "version": "1.1.68",
5
5
  "description": "GeneXus IDE UI components",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.js",