@genexus/genexus-ide-ui 1.1.65 → 1.1.67

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 (107) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-comments-viewer.cjs.entry.js +66 -0
  3. package/dist/cjs/gx-ide-comments-viewer.cjs.entry.js.map +1 -0
  4. package/dist/cjs/gx-ide-team-dev-bring-all-changes-selector.cjs.entry.js +210 -0
  5. package/dist/cjs/gx-ide-team-dev-bring-all-changes-selector.cjs.entry.js.map +1 -0
  6. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +29 -28
  7. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +10 -2
  9. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-team-dev-preview.cjs.entry.js +34 -20
  11. package/dist/cjs/gx-ide-team-dev-preview.cjs.entry.js.map +1 -1
  12. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +9 -2
  13. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/collection-manifest.json +2 -0
  16. package/dist/collection/components/_helpers/comments-viewer/comments-viewer.css +41 -0
  17. package/dist/collection/components/_helpers/comments-viewer/comments-viewer.js +112 -0
  18. package/dist/collection/components/_helpers/comments-viewer/comments-viewer.js.map +1 -0
  19. package/dist/collection/components/_helpers/comments-viewer/gx-ide-assets/comments-viewer/langs/comments-viewer.lang.en.json +5 -0
  20. package/dist/collection/components/_helpers/comments-viewer/gx-ide-assets/comments-viewer/langs/comments-viewer.lang.ja.json +5 -0
  21. package/dist/collection/components/_helpers/comments-viewer/gx-ide-assets/comments-viewer/langs/comments-viewer.lang.zh.json +5 -0
  22. package/dist/collection/components/team-dev/bring-all-changes-selector/bring-all-changes-selector.css +27 -0
  23. package/dist/collection/components/team-dev/bring-all-changes-selector/bring-all-changes-selector.js +273 -0
  24. package/dist/collection/components/team-dev/bring-all-changes-selector/bring-all-changes-selector.js.map +1 -0
  25. package/dist/collection/components/team-dev/bring-all-changes-selector/gx-ide-assets/team-dev-bring-all-changes-selector/langs/team-dev-bring-all-changes-selector.lang.en.json +22 -0
  26. package/dist/collection/components/team-dev/bring-all-changes-selector/gx-ide-assets/team-dev-bring-all-changes-selector/langs/team-dev-bring-all-changes-selector.lang.ja.json +22 -0
  27. package/dist/collection/components/team-dev/bring-all-changes-selector/gx-ide-assets/team-dev-bring-all-changes-selector/langs/team-dev-bring-all-changes-selector.lang.zh.json +22 -0
  28. package/dist/collection/components/team-dev/bring-changes/bring-changes.css +22 -8
  29. package/dist/collection/components/team-dev/bring-changes/bring-changes.js +69 -28
  30. package/dist/collection/components/team-dev/bring-changes/bring-changes.js.map +1 -1
  31. package/dist/collection/components/team-dev/bring-changes/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.en.json +6 -0
  32. package/dist/collection/components/team-dev/bring-changes/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +6 -0
  33. package/dist/collection/components/team-dev/bring-changes/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.zh.json +6 -0
  34. package/dist/collection/components/team-dev/preview/team-dev-preview.css +15 -0
  35. package/dist/collection/components/team-dev/preview/team-dev-preview.js +56 -20
  36. package/dist/collection/components/team-dev/preview/team-dev-preview.js.map +1 -1
  37. package/dist/collection/components/team-dev/update/update.js +31 -2
  38. package/dist/collection/components/team-dev/update/update.js.map +1 -1
  39. package/dist/collection/components/team-dev/version-control/commit/commit.js +33 -3
  40. package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
  41. package/dist/collection/components/team-dev/version-control/common/types.js.map +1 -1
  42. package/dist/collection/testing/locale.e2e.js +3 -1
  43. package/dist/collection/testing/locale.e2e.js.map +1 -1
  44. package/dist/components/gx-ide-comments-viewer.d.ts +11 -0
  45. package/dist/components/gx-ide-comments-viewer.js +83 -0
  46. package/dist/components/gx-ide-comments-viewer.js.map +1 -0
  47. package/dist/components/gx-ide-team-dev-bring-all-changes-selector.d.ts +11 -0
  48. package/dist/components/gx-ide-team-dev-bring-all-changes-selector.js +232 -0
  49. package/dist/components/gx-ide-team-dev-bring-all-changes-selector.js.map +1 -0
  50. package/dist/components/gx-ide-team-dev-bring-changes.js +31 -28
  51. package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
  52. package/dist/components/gx-ide-team-dev-commit.js +13 -3
  53. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  54. package/dist/components/gx-ide-team-dev-preview.js +37 -21
  55. package/dist/components/gx-ide-team-dev-preview.js.map +1 -1
  56. package/dist/components/gx-ide-team-dev-update.js +12 -3
  57. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  58. package/dist/esm/genexus-ide-ui.js +1 -1
  59. package/dist/esm/gx-ide-comments-viewer.entry.js +62 -0
  60. package/dist/esm/gx-ide-comments-viewer.entry.js.map +1 -0
  61. package/dist/esm/gx-ide-team-dev-bring-all-changes-selector.entry.js +206 -0
  62. package/dist/esm/gx-ide-team-dev-bring-all-changes-selector.entry.js.map +1 -0
  63. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +29 -28
  64. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
  65. package/dist/esm/gx-ide-team-dev-commit.entry.js +10 -2
  66. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  67. package/dist/esm/gx-ide-team-dev-preview.entry.js +34 -20
  68. package/dist/esm/gx-ide-team-dev-preview.entry.js.map +1 -1
  69. package/dist/esm/gx-ide-team-dev-update.entry.js +9 -2
  70. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  71. package/dist/esm/loader.js +1 -1
  72. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  73. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  74. package/dist/genexus-ide-ui/gx-ide-assets/comments-viewer/langs/comments-viewer.lang.en.json +5 -0
  75. package/dist/genexus-ide-ui/gx-ide-assets/comments-viewer/langs/comments-viewer.lang.ja.json +5 -0
  76. package/dist/genexus-ide-ui/gx-ide-assets/comments-viewer/langs/comments-viewer.lang.zh.json +5 -0
  77. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-all-changes-selector/langs/team-dev-bring-all-changes-selector.lang.en.json +22 -0
  78. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-all-changes-selector/langs/team-dev-bring-all-changes-selector.lang.ja.json +22 -0
  79. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-all-changes-selector/langs/team-dev-bring-all-changes-selector.lang.zh.json +22 -0
  80. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.en.json +6 -0
  81. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.ja.json +6 -0
  82. package/dist/genexus-ide-ui/gx-ide-assets/team-dev-bring-changes/langs/team-dev-bring-changes.lang.zh.json +6 -0
  83. package/dist/genexus-ide-ui/p-0488759f.entry.js +82 -0
  84. package/dist/genexus-ide-ui/p-0488759f.entry.js.map +1 -0
  85. package/dist/genexus-ide-ui/p-09693b80.entry.js +274 -0
  86. package/dist/genexus-ide-ui/p-09693b80.entry.js.map +1 -0
  87. package/dist/genexus-ide-ui/{p-ab8aee7d.entry.js → p-1890d374.entry.js} +209 -181
  88. package/dist/genexus-ide-ui/p-1890d374.entry.js.map +1 -0
  89. package/dist/genexus-ide-ui/{p-3d71b287.entry.js → p-9285b6db.entry.js} +34 -28
  90. package/dist/genexus-ide-ui/p-9285b6db.entry.js.map +1 -0
  91. package/dist/genexus-ide-ui/{p-73c3f9ec.entry.js → p-c8b0004e.entry.js} +15 -9
  92. package/dist/genexus-ide-ui/p-c8b0004e.entry.js.map +1 -0
  93. package/dist/genexus-ide-ui/{p-eeae4b37.entry.js → p-e2fd2c24.entry.js} +135 -128
  94. package/dist/genexus-ide-ui/p-e2fd2c24.entry.js.map +1 -0
  95. package/dist/types/components/_helpers/comments-viewer/comments-viewer.d.ts +19 -0
  96. package/dist/types/components/team-dev/bring-all-changes-selector/bring-all-changes-selector.d.ts +45 -0
  97. package/dist/types/components/team-dev/bring-changes/bring-changes.d.ts +9 -1
  98. package/dist/types/components/team-dev/preview/team-dev-preview.d.ts +8 -0
  99. package/dist/types/components/team-dev/update/update.d.ts +8 -0
  100. package/dist/types/components/team-dev/version-control/commit/commit.d.ts +8 -0
  101. package/dist/types/components/team-dev/version-control/common/types.d.ts +1 -0
  102. package/dist/types/components.d.ts +94 -0
  103. package/package.json +1 -1
  104. package/dist/genexus-ide-ui/p-3d71b287.entry.js.map +0 -1
  105. package/dist/genexus-ide-ui/p-73c3f9ec.entry.js.map +0 -1
  106. package/dist/genexus-ide-ui/p-ab8aee7d.entry.js.map +0 -1
  107. package/dist/genexus-ide-ui/p-eeae4b37.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["teamDevPreviewCss","TeamDevEmptyState","CSS_BUNDLES","VERSION_ICON","getIconPath","category","name","colorType","ADD_ICON","EDITED_ICON","SUBTRACT_ICON","REFRESH_ICON","WARNING_ICON","OPEN_WINDOW_ICON","LOADER_ICON","ERROR_ICON","REMOTE_CHANGES_TAB","LOCAL_CHANGES_TAB","GxIdeTeamDevPreview","_GxIdeTeamDevPreview_componentLocale","set","this","_GxIdeTeamDevPreview_isPendingReloadLocalChanges","_GxIdeTeamDevPreview_isPendingReloadRemoteChanges","_GxIdeTeamDevPreview_commitData","_GxIdeTeamDevPreview_updateData","_GxIdeTeamDevPreview_prevVersionName","_GxIdeTeamDevPreview_isTeamDevOptionsEnabled","_GxIdeTeamDevPreview_emptyStateConfig","_GxIdeTeamDevPreview_localChangesTreeEL","_GxIdeTeamDevPreview_remoteChangesTreeEL","_GxIdeTeamDevPreview_setEmptyStateConfig","__classPrivateFieldSet","NoKBOpen","title","__classPrivateFieldGet","emptyState","noConnectedKBTitle","description","noOpenKBDescription","buttonText","buttons","createKBFromServer","buttonHandler","_GxIdeTeamDevPreview_createKBFromServerHandler","showButton","NoConnectedKB","noConnectedKBDescription","shareKBToServer","_GxIdeTeamDevPreview_shareKBToServerHandler","NoConnectedGXServer","noConnectedGXServerTitle","noConnectedGXServerDescription","reconnect","_GxIdeTeamDevPreview_reconnectHandler","NoLinkedVersion","noLinkedVersionTitle","noLinkedVersionDescription","undefined","FrozenVersion","frozenVersionTitle","frozenVersionDescription","None","_GxIdeTeamDevPreview_setTeamDevOptionsStatus","teamDevPreviewData","isKBOpen","isLinkedKB","isLinkedVersion","isFrozenVersion","existsGXServerSession","_GxIdeTeamDevPreview_loadChanges","async","type","loadingLocalChanges","loadLocalChangesCallback","_GxIdeTeamDevPreview_convertDataToTreeView","call","loadingRemoteChanges","loadRemoteChangesCallback","rootItemName","data","isLocal","pendingCommitChangesCount","_b","_a","pendingForCommit","length","captions","localChanges","pendingRemoteChangesCount","_d","_c","pendingForUpdate","remoteChanges","treeViewModel","id","caption","expanded","parts","items","map","item","startImgSrc","icon","typeIcon","endImgSrc","_GxIdeTeamDevPreview_renderIcon","state","action","h","style","display","color","marginLeft","module","leaf","localChangesTreeViewModel","_GxIdeTeamDevPreview_updateTabModel","remoteChangesTreeViewModel","_GxIdeTeamDevPreview_checkedItemsChangeHandler","event","checkedNodesIds","Array","from","detail","values","filter","node","checked","localChangesCheckedNodesIds","updateItemsProperties","remoteChangesCheckedNodesIds","shareKBToServerCallback","createKBFromServerCallback","_GxIdeTeamDevPreview_openFullDialogHandler","openFullDialogCallback","_GxIdeTeamDevPreview_commitChangesHandler","committingChanges","commitCallback","commitMessage","_GxIdeTeamDevPreview_commitMessageInputHandler","_GxIdeTeamDevPreview_updateRemoteChangesHandler","updatingChanges","updateCallback","_GxIdeTeamDevPreview_tabSelectionChangedHandler","selectedTabId","newSelectedId","_GxIdeTeamDevPreview_openTeamDevInfoHandler","openTeamDevInfoCallback","reconnectCallback","value","iconMap","inserted","modified","deleted","conflicted","_GxIdeTeamDevPreview_disableConfirmButton","trim","serverOperationsDisabled","tabId","tabModel","tab","_GxIdeTeamDevPreview_getEmptyStateTitle","getEmptyStateType","_GxIdeTeamDevPreview_getEmptyStateDescription","_GxIdeTeamDevPreview_getEmptyStateButtonText","_GxIdeTeamDevPreview_getEmptyStateButtonHandler","_GxIdeTeamDevPreview_renderEmptyStateButton","_GxIdeTeamDevPreview_renderReloadChangesButton","isLoading","isConfirmationInProcess","reloadCaption","reloadingCaption","reloadLocal","reloadingLocal","reloadRemote","reloadingRemote","class","onClick","disabled","src","_GxIdeTeamDevPreview_renderEmptyState","show","message","noLocalChanges","noRemoteChanges","_GxIdeTeamDevPreview_renderTreeChanges","Fragment","checkbox","model","toggleCheckboxes","onCheckedItemsChange","expandableButton","expandOnClick","ref","el","_GxIdeTeamDevPreview_renderConfirmButton","committing","updating","commit","update","_GxIdeTeamDevPreview_renderLocalChanges","accessibleName","accessibleNames","placeholder","placeholders","onInput","multiline","_GxIdeTeamDevPreview_renderRemoteChanges","onTeamDevPreviewDataChanged","versionName","versionChanged","reloadChanges","componentWillLoad","Locale","getComponentStrings","componentDidLoad","isActiveTab","disableServerOperations","render","Host","widget","isAnimated","stateIconSrc","stateTitle","stateDescription","about","teamDev","selectedId","tabListPosition","onSelectedItemChange","slot","footer","openFullDialog"],"sources":["src/components/team-dev/preview/team-dev-preview.scss?tag=gx-ide-team-dev-preview&encapsulation=shadow","src/components/team-dev/preview/team-dev-preview.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n// Variables para gaps y tamaños\n$gap-main: 14px;\n$gap-secondary: 8px;\n$max-button-width: 300px;\n$commit-message-height: 65px;\n\n// Mixin para grid con gap\n@mixin grid-gap($gap) {\n display: grid;\n gap: $gap;\n}\n\n:host {\n display: grid;\n block-size: 100%;\n}\n\n.main-container {\n @include grid-gap($gap-main);\n grid-template-rows: max-content 1fr max-content;\n overflow: auto;\n\n .local-changes-container {\n @include grid-gap($gap-secondary);\n grid-template-rows: max-content max-content max-content 1fr;\n padding-inline: 0;\n }\n .remote-changes-container {\n @include grid-gap($gap-secondary);\n grid-template-rows: max-content max-content 1fr;\n padding-inline: 0;\n }\n}\n\n.control-footer-with-border.open-window-container {\n --control-footer-justify-content: flex-start;\n}\n\n// WA: Loader animation workaround, ideally move to mercury\n.loader-icon {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n// WA: Avoid scrollbar flickering for empty state\n.empty-state {\n overflow: hidden;\n}\n\n.giu-static-pill-icon-and-text {\n background-color: var(--mer-surface__elevation--02);\n}\n\n.tab {\n overflow: auto;\n row-gap: $gap-secondary;\n\n &.border-style-none {\n border-style: none;\n }\n}\n\n.empty-state-button {\n inline-size: 100%;\n max-inline-size: $max-button-width;\n}\n\n.button-tertiary {\n &.team-dev-button {\n text-decoration: underline;\n color: var(--mer-text__neutral);\n }\n\n &.refresh-button,\n &.open-full-dialog-button {\n padding-block: 0;\n justify-self: start;\n }\n}\n\n.commit-message-textarea {\n block-size: $commit-message-height;\n}\n\n.empty-state-container {\n @include grid-gap($gap-secondary);\n grid-template-rows: max-content max-content;\n}\n\n// WA: These styles display the tree as a flat list while preserving tree functionality.\n\n// Style for change-item header\nch-tree-view-render::part(change-item item__header) {\n padding-inline-start: 0;\n}\n\n// Style for root-item header\nch-tree-view-render::part(root-item item__header) {\n padding-inline-start: 0;\n font-weight: var(--font-weight-semi-bold);\n font-size: var(--font-size-body-s);\n line-height: var(--line-height-tight);\n}\n\n.version-pill {\n @include ellipsis;\n}\n\n.giu-static-pill-icon-and-text.version {\n grid-auto-columns: unset;\n}\n","import {\n ChEditCustomEvent,\n TabModel,\n TabSelectedItemInfo,\n TreeViewItemModelExtended,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport {\n Component,\n Element,\n Fragment,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\nimport { Locale } from \"../../../common/locale\";\nimport {\n Action,\n CommitCallback,\n CommitData,\n LoadLocalChangesCallback,\n LoadRemoteChangesCallback,\n ModifiedObject,\n ModifiedObjectData,\n ObjectState,\n UpdateCallback,\n UpdateData\n} from \"../version-control/common/types\";\n\nenum TeamDevEmptyState {\n NoKBOpen,\n NoConnectedKB,\n NoConnectedGXServer,\n NoLinkedVersion,\n FrozenVersion,\n None\n}\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\",\n \"components/tree-view\",\n \"components/tab\"\n];\n\nconst VERSION_ICON = getIconPath({\n category: \"system\",\n name: \"version\",\n colorType: \"on-surface\"\n});\n\nconst ADD_ICON = getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"success\"\n});\n\nconst EDITED_ICON = getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"warning\"\n});\n\nconst SUBTRACT_ICON = getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"error\"\n});\n\nconst REFRESH_ICON = getIconPath({\n category: \"system\",\n name: \"refresh\",\n colorType: \"primary\"\n});\n\nconst WARNING_ICON = getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n});\n\nconst OPEN_WINDOW_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"open-window\",\n colorType: \"on-surface\"\n});\n\nconst LOADER_ICON = getIconPath({\n category: \"system\",\n name: \"loading\",\n colorType: \"primary\"\n});\n\nconst ERROR_ICON = getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"on-surface\"\n});\n\nconst REMOTE_CHANGES_TAB = \"remote-changes-tab\";\nconst LOCAL_CHANGES_TAB = \"local-changes-tab\";\n\n@Component({\n tag: \"gx-ide-team-dev-preview\",\n styleUrl: \"team-dev-preview.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-preview\"]\n})\nexport class GxIdeTeamDevPreview {\n #componentLocale: any;\n #isPendingReloadLocalChanges: boolean = false;\n #isPendingReloadRemoteChanges: boolean = false;\n #commitData: CommitData;\n #updateData: UpdateData;\n #prevVersionName: string;\n #isTeamDevOptionsEnabled: boolean = false;\n #emptyStateConfig: { [key: string]: any } = {};\n #localChangesTreeEL: HTMLChTreeViewRenderElement;\n #remoteChangesTreeEL: HTMLChTreeViewRenderElement;\n\n @Element() el: HTMLGxIdeTeamDevPreviewElement;\n\n @State() loadingRemoteChanges: boolean = false;\n @State() loadingLocalChanges: boolean = true;\n @State() tabModel: TabModel = [];\n\n /**\n * Currently selected tab ID\n */\n @State() selectedTabId: string = LOCAL_CHANGES_TAB;\n\n /**\n * Number of pending commit changes\n */\n @State() pendingCommitChangesCount: number = 0;\n /**\n * Number of pending remote changes\n */\n @State() pendingRemoteChangesCount: number = 0;\n\n /**\n * Represents the tree view model for remote changes\n */\n @State() remoteChangesTreeViewModel: TreeViewModel = [];\n\n /**\n * Represents the tree view model for local changes\n */\n @State() localChangesTreeViewModel: TreeViewModel = [];\n\n /**\n * Represents the selected nodes ids from remote changes tree\n */\n @State() remoteChangesCheckedNodesIds: string[] = [];\n\n /**\n * Represents the selected nodes ids from local changes tree\n */\n @State() localChangesCheckedNodesIds: string[] = [];\n\n /**\n * Commit message entered by the user\n */\n @State() commitMessage: string = \"\";\n\n /**\n * Indicates if the commit process is ongoing\n */\n @State() committingChanges: boolean = false;\n\n /**\n * Indicates if the update process is ongoing\n */\n @State() updatingChanges: boolean = false;\n\n /**\n * Indicates if the server operations (commit/update) should be disabled\n */\n @State() serverOperationsDisabled: boolean = false;\n\n /**\n * Data required to render the Team Dev Preview\n */\n @Prop() readonly teamDevPreviewData: TeamDevPreviewData;\n @Watch(\"teamDevPreviewData\")\n async onTeamDevPreviewDataChanged() {\n const { versionName } = this.teamDevPreviewData;\n let versionChanged = false;\n\n this.#setTeamDevOptionsStatus();\n if (this.#prevVersionName !== versionName) {\n this.#prevVersionName = versionName;\n versionChanged = true;\n }\n\n if (this.#isTeamDevOptionsEnabled && versionChanged) {\n await this.reloadChanges(\"local\");\n await this.reloadChanges(\"remote\");\n }\n }\n\n /**\n * Invoked to return the list of remote changes\n */\n @Prop() readonly loadRemoteChangesCallback!: LoadRemoteChangesCallback;\n\n /**\n * Invoked to return the list of local changes\n */\n @Prop() readonly loadLocalChangesCallback!: LoadLocalChangesCallback;\n\n /**\n * Invoked when user starts the commit process\n */\n @Prop() readonly commitCallback!: CommitCallback;\n\n /**\n * Invoked when user starts the update process\n */\n @Prop() readonly updateCallback!: UpdateCallback;\n\n /**\n * Invoked to open the full Team Dev dialog\n */\n @Prop() readonly openFullDialogCallback!: () => Promise<void>;\n\n /**\n * Invoked to share the knowledge base to the server\n */\n @Prop() readonly shareKBToServerCallback!: () => Promise<void>;\n\n /**\n * Invoked to create a knowledge base from the server\n */\n @Prop() readonly createKBFromServerCallback!: () => Promise<void>;\n\n /**\n * Invoked to open the Team Development information\n */\n @Prop() readonly openTeamDevInfoCallback!: () => Promise<void>;\n\n /**\n * Invoked to reconnect to GeneXus Server\n */\n @Prop() readonly reconnectCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#setTeamDevOptionsStatus();\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.tabModel = [\n {\n id: LOCAL_CHANGES_TAB,\n name: `${this.#componentLocale.captions.localChanges}`\n },\n {\n id: REMOTE_CHANGES_TAB,\n name: `${this.#componentLocale.captions.remoteChanges}`\n }\n ];\n this.#setEmptyStateConfig();\n }\n\n async componentDidLoad() {\n if (this.#isTeamDevOptionsEnabled) {\n await this.#loadChanges(\"local\");\n this.#isPendingReloadRemoteChanges = true;\n }\n this.loadingLocalChanges = false;\n }\n\n /**\n * Used by the host to reload remote or local changes\n */\n @Method()\n async reloadChanges(type: TeamDevPreviewMode) {\n const isLocal = type === \"local\";\n const isActiveTab = isLocal\n ? this.selectedTabId === LOCAL_CHANGES_TAB\n : this.selectedTabId === REMOTE_CHANGES_TAB;\n\n if (!isActiveTab) {\n if (isLocal) {\n this.#isPendingReloadLocalChanges = true;\n } else {\n this.#isPendingReloadRemoteChanges = true;\n }\n return;\n }\n\n isLocal\n ? await this.#loadChanges(\"local\")\n : await this.#loadChanges(\"remote\");\n }\n\n /**\n * Used by the host to instruct the component to disable the commit/update button.\n */\n @Method()\n async disableServerOperations(value: boolean) {\n this.serverOperationsDisabled = value;\n }\n\n #setEmptyStateConfig = () => {\n this.#emptyStateConfig = {\n [TeamDevEmptyState.NoKBOpen]: {\n title: this.#componentLocale.emptyState.noConnectedKBTitle,\n description: this.#componentLocale.emptyState.noOpenKBDescription,\n buttonText: this.#componentLocale.buttons.createKBFromServer,\n buttonHandler: this.#createKBFromServerHandler,\n showButton: true\n },\n [TeamDevEmptyState.NoConnectedKB]: {\n title: this.#componentLocale.emptyState.noConnectedKBTitle,\n description: this.#componentLocale.emptyState.noConnectedKBDescription,\n buttonText: this.#componentLocale.buttons.shareKBToServer,\n buttonHandler: this.#shareKBToServerHandler,\n showButton: true\n },\n [TeamDevEmptyState.NoConnectedGXServer]: {\n title: this.#componentLocale.emptyState.noConnectedGXServerTitle,\n description:\n this.#componentLocale.emptyState.noConnectedGXServerDescription,\n buttonText: this.#componentLocale.buttons.reconnect,\n buttonHandler: this.#reconnectHandler,\n showButton: true\n },\n [TeamDevEmptyState.NoLinkedVersion]: {\n title: this.#componentLocale.emptyState.noLinkedVersionTitle,\n description:\n this.#componentLocale.emptyState.noLinkedVersionDescription,\n buttonText: \"\",\n buttonHandler: undefined,\n showButton: false\n },\n [TeamDevEmptyState.FrozenVersion]: {\n title: this.#componentLocale.emptyState.frozenVersionTitle,\n description: this.#componentLocale.emptyState.frozenVersionDescription,\n buttonText: \"\",\n buttonHandler: undefined,\n showButton: false\n },\n [TeamDevEmptyState.None]: {\n title: \"\",\n description: \"\",\n buttonText: \"\",\n buttonHandler: undefined,\n showButton: false\n }\n };\n };\n\n #setTeamDevOptionsStatus = () => {\n if (\n this.teamDevPreviewData.isKBOpen &&\n this.teamDevPreviewData.isLinkedKB &&\n this.teamDevPreviewData.isLinkedVersion &&\n !this.teamDevPreviewData.isFrozenVersion &&\n this.teamDevPreviewData.existsGXServerSession\n ) {\n this.#isTeamDevOptionsEnabled = true;\n return;\n }\n this.#isTeamDevOptionsEnabled = false;\n };\n\n #loadChanges = async (type: TeamDevPreviewMode) => {\n if (type === \"local\") {\n this.loadingLocalChanges = true;\n this.#commitData = await this.loadLocalChangesCallback();\n this.#convertDataToTreeView(\"local\");\n this.loadingLocalChanges = false;\n this.#isPendingReloadLocalChanges = false;\n } else {\n this.loadingRemoteChanges = true;\n this.#updateData = await this.loadRemoteChangesCallback();\n this.#convertDataToTreeView(\"remote\");\n this.loadingRemoteChanges = false;\n this.#isPendingReloadRemoteChanges = false;\n }\n };\n\n #convertDataToTreeView = (type: TeamDevPreviewMode) => {\n let rootItemName = \"\";\n let data: ModifiedObjectData[] | ModifiedObject[];\n const isLocal = type === \"local\";\n if (isLocal) {\n this.pendingCommitChangesCount =\n this.#commitData?.pendingForCommit?.length || 0;\n rootItemName = `${this.#componentLocale.captions.localChanges} (${this.pendingCommitChangesCount})`;\n data = this.#commitData.pendingForCommit;\n } else {\n this.pendingRemoteChangesCount =\n this.#updateData?.pendingForUpdate?.length || 0;\n rootItemName = `${this.#componentLocale.captions.remoteChanges} (${this.pendingRemoteChangesCount})`;\n data = this.#updateData.pendingForUpdate;\n }\n\n const treeViewModel: TreeViewModel = [\n {\n id: \"root\",\n caption: rootItemName,\n expanded: true,\n parts: \"root-item\",\n items: data?.map(item => ({\n id: item.id,\n startImgSrc: isLocal\n ? (item as ModifiedObjectData).type.icon\n : (item as ModifiedObject).typeIcon,\n endImgSrc: isLocal\n ? this.#renderIcon((item as ModifiedObjectData).state)\n : this.#renderIcon((item as ModifiedObject).action),\n caption: (\n //WA: Used to apply different styles to the item caption and path\n <div\n style={{\n display: \"flex\"\n }}\n >\n <span>{item.name}</span>\n <span\n style={{\n color: \"var(--mer-color__neutral-gray--450)\",\n marginLeft: \"4px\"\n }}\n >\n {item.module}\n </span>\n </div>\n ),\n leaf: true,\n parts: \"change-item\"\n }))\n }\n ];\n\n if (isLocal) {\n this.localChangesTreeViewModel = treeViewModel;\n this.#updateTabModel(LOCAL_CHANGES_TAB);\n } else {\n this.remoteChangesTreeViewModel = treeViewModel;\n this.#updateTabModel(REMOTE_CHANGES_TAB);\n }\n };\n\n #checkedItemsChangeHandler = async (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>,\n type: TeamDevPreviewMode\n ) => {\n const checkedNodesIds = Array.from(event.detail.values())\n .filter(node => node.item.checked && node.item.id !== \"root\")\n .map(node => node.item.id);\n\n if (type === \"local\") {\n this.localChangesCheckedNodesIds = checkedNodesIds;\n this.#localChangesTreeEL.updateItemsProperties([\"root\"], {\n caption: `${this.#componentLocale.captions.localChanges} (${this.localChangesCheckedNodesIds.length}/${this.pendingCommitChangesCount})`\n });\n } else {\n this.remoteChangesCheckedNodesIds = checkedNodesIds;\n this.#remoteChangesTreeEL.updateItemsProperties([\"root\"], {\n caption: `${this.#componentLocale.captions.remoteChanges} (${this.remoteChangesCheckedNodesIds.length}/${this.pendingRemoteChangesCount})`\n });\n }\n };\n\n #shareKBToServerHandler = async () => {\n await this.shareKBToServerCallback();\n };\n\n #createKBFromServerHandler = async () => {\n await this.createKBFromServerCallback();\n };\n\n #openFullDialogHandler = async () => {\n await this.openFullDialogCallback();\n };\n\n #commitChangesHandler = async () => {\n this.committingChanges = true;\n await this.commitCallback(\n this.localChangesCheckedNodesIds,\n this.commitMessage\n );\n this.commitMessage = \"\";\n this.committingChanges = false;\n };\n\n #commitMessageInputHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.commitMessage = (event.detail as string) || \"\";\n };\n\n #updateRemoteChangesHandler = async () => {\n this.updatingChanges = true;\n await this.updateCallback(this.remoteChangesCheckedNodesIds);\n this.updatingChanges = false;\n this.remoteChangesCheckedNodesIds = [];\n };\n\n #tabSelectionChangedHandler = async (\n event: CustomEvent<TabSelectedItemInfo>\n ): Promise<void> => {\n this.selectedTabId = event.detail.newSelectedId;\n if (\n this.selectedTabId === LOCAL_CHANGES_TAB &&\n this.#isPendingReloadLocalChanges\n ) {\n await this.#loadChanges(\"local\");\n }\n if (\n this.selectedTabId === REMOTE_CHANGES_TAB &&\n this.#isPendingReloadRemoteChanges\n ) {\n await this.#loadChanges(\"remote\");\n }\n };\n\n #openTeamDevInfoHandler = async () => {\n await this.openTeamDevInfoCallback();\n };\n\n #reconnectHandler = async () => {\n await this.reconnectCallback();\n };\n\n #renderIcon = (value: ObjectState | Action) => {\n const iconMap = {\n \"inserted\": ADD_ICON,\n \"modified\": EDITED_ICON,\n \"deleted\": SUBTRACT_ICON,\n \"conflicted\": WARNING_ICON,\n \"modified-with-conflicts\": WARNING_ICON\n };\n return iconMap[value] || null;\n };\n\n #disableConfirmButton = (type: TeamDevPreviewMode): boolean => {\n const isLocal = type === \"local\";\n if (isLocal) {\n return (\n this.loadingLocalChanges ||\n !this.commitMessage.trim().length ||\n this.localChangesCheckedNodesIds.length === 0 ||\n this.committingChanges ||\n this.serverOperationsDisabled\n );\n } else {\n return (\n this.loadingRemoteChanges ||\n this.remoteChangesCheckedNodesIds.length === 0 ||\n this.updatingChanges ||\n this.serverOperationsDisabled\n );\n }\n };\n\n #updateTabModel = (tabId: string) => {\n this.tabModel = this.tabModel.map(tab =>\n tab.id === tabId\n ? {\n ...tab,\n name:\n tabId === LOCAL_CHANGES_TAB\n ? `${this.#componentLocale.captions.localChanges} (${this.pendingCommitChangesCount})`\n : `${this.#componentLocale.captions.remoteChanges} (${this.pendingRemoteChangesCount})`\n }\n : tab\n );\n };\n\n private getEmptyStateType(): TeamDevEmptyState {\n const {\n isFrozenVersion,\n existsGXServerSession,\n isKBOpen,\n isLinkedVersion,\n isLinkedKB\n } = this.teamDevPreviewData;\n if (!isKBOpen) {\n return TeamDevEmptyState.NoKBOpen;\n }\n if (isKBOpen && !isLinkedKB) {\n return TeamDevEmptyState.NoConnectedKB;\n }\n if (isKBOpen && isLinkedKB && !isLinkedVersion && !existsGXServerSession) {\n return TeamDevEmptyState.NoConnectedGXServer;\n }\n if (isKBOpen && isLinkedKB && !isLinkedVersion) {\n return TeamDevEmptyState.NoLinkedVersion;\n }\n if (isKBOpen && isLinkedKB && existsGXServerSession && isFrozenVersion) {\n return TeamDevEmptyState.FrozenVersion;\n }\n if (isKBOpen && isLinkedKB && !existsGXServerSession) {\n return TeamDevEmptyState.NoConnectedGXServer;\n }\n return TeamDevEmptyState.None;\n }\n\n #getEmptyStateTitle = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].title;\n\n #getEmptyStateDescription = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].description;\n\n #getEmptyStateButtonText = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].buttonText;\n\n #getEmptyStateButtonHandler = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].buttonHandler;\n\n #renderEmptyStateButton = () =>\n this.#emptyStateConfig[this.getEmptyStateType()].showButton;\n\n #renderReloadChangesButton = (type: TeamDevPreviewMode) => {\n let isLoading = false;\n let isConfirmationInProcess = false;\n let reloadCaption;\n let reloadingCaption;\n const isLocal = type === \"local\";\n\n if (isLocal) {\n isLoading = this.loadingLocalChanges;\n isConfirmationInProcess = this.committingChanges;\n reloadCaption = this.#componentLocale.buttons.reloadLocal;\n reloadingCaption = this.#componentLocale.buttons.reloadingLocal;\n } else {\n isLoading = this.loadingRemoteChanges;\n isConfirmationInProcess = this.updatingChanges;\n reloadCaption = this.#componentLocale.buttons.reloadRemote;\n reloadingCaption = this.#componentLocale.buttons.reloadingRemote;\n }\n return (\n <button\n class=\"button-tertiary button-icon-and-text body-regular-s refresh-button\"\n type=\"button\"\n onClick={\n isLocal\n ? () => this.#loadChanges(\"local\")\n : () => this.#loadChanges(\"remote\")\n }\n disabled={\n isLoading || isConfirmationInProcess || this.serverOperationsDisabled\n }\n >\n <ch-image\n class={{\n \"icon-md\": true,\n \"loader-icon\": isLoading\n }}\n src={isLoading ? LOADER_ICON : REFRESH_ICON}\n type=\"mask\"\n />\n\n {isLoading ? reloadingCaption : reloadCaption}\n </button>\n );\n };\n\n #renderEmptyState = (type: TeamDevPreviewMode) => {\n let show = false;\n let message = \"\";\n\n if (type === \"local\" && this.pendingCommitChangesCount === 0) {\n show = true;\n message = this.#componentLocale.emptyState.noLocalChanges;\n } else if (type === \"remote\" && this.pendingRemoteChangesCount === 0) {\n show = true;\n message = this.#componentLocale.emptyState.noRemoteChanges;\n }\n\n return show ? (\n <div class=\"empty-state-container\">\n <p class=\"body-regular-s\">{message}</p>\n {this.#renderReloadChangesButton(type)}\n </div>\n ) : null;\n };\n\n #renderTreeChanges = (type: TeamDevPreviewMode) => {\n const isLocal = type === \"local\";\n\n if (isLocal) {\n return (\n <Fragment>\n {this.#renderReloadChangesButton(type)}\n {!this.loadingLocalChanges && !this.committingChanges && (\n <ch-tree-view-render\n checkbox\n checked\n class=\"tree-view\"\n model={this.localChangesTreeViewModel}\n toggleCheckboxes\n onCheckedItemsChange={event =>\n this.#checkedItemsChangeHandler(event, type)\n }\n expandableButton=\"no\"\n expandOnClick={false}\n ref={el =>\n (this.#localChangesTreeEL = el as HTMLChTreeViewRenderElement)\n }\n />\n )}\n </Fragment>\n );\n } else {\n return (\n <Fragment>\n {this.#renderReloadChangesButton(type)}\n {!this.loadingRemoteChanges && !this.updatingChanges && (\n <ch-tree-view-render\n checkbox\n checked\n class=\"tree-view\"\n model={this.remoteChangesTreeViewModel}\n toggleCheckboxes\n onCheckedItemsChange={event =>\n this.#checkedItemsChangeHandler(event, type)\n }\n expandableButton=\"no\"\n expandOnClick={false}\n ref={el =>\n (this.#remoteChangesTreeEL = el as HTMLChTreeViewRenderElement)\n }\n />\n )}\n </Fragment>\n );\n }\n };\n\n #renderConfirmButton = (type: TeamDevPreviewMode) => {\n const isLocal = type === \"local\";\n let isConfirmationInProcess = false;\n let id = \"\";\n if (isLocal) {\n isConfirmationInProcess = this.committingChanges;\n id = \"commit-changes-button\";\n } else {\n isConfirmationInProcess = this.updatingChanges;\n id = \"update-remote-changes-button\";\n }\n return (\n <button\n id={id}\n class={{\n \"button-primary\": true,\n \"button-icon-and-text\": isConfirmationInProcess\n }}\n type=\"button\"\n disabled={this.#disableConfirmButton(type)}\n onClick={\n isLocal\n ? this.#commitChangesHandler\n : this.#updateRemoteChangesHandler\n }\n >\n {isConfirmationInProcess && (\n <ch-image class=\"icon-md loader-icon\" src={LOADER_ICON} type=\"mask\" />\n )}\n {isConfirmationInProcess\n ? isLocal\n ? this.#componentLocale.buttons.committing\n : this.#componentLocale.buttons.updating\n : isLocal\n ? this.#componentLocale.buttons.commit\n : this.#componentLocale.buttons.update}\n </button>\n );\n };\n\n #renderLocalChanges = () => {\n if (this.pendingCommitChangesCount > 0) {\n return (\n <Fragment>\n <ch-edit\n id=\"commit-message-input\"\n class=\"input commit-message-textarea\"\n value={this.commitMessage}\n accessibleName={this.#componentLocale.accessibleNames.commitMessage}\n placeholder={this.#componentLocale.placeholders.commitMessage}\n disabled={this.loadingLocalChanges}\n onInput={this.#commitMessageInputHandler}\n multiline\n />\n {this.#renderConfirmButton(\"local\")}\n {this.#renderTreeChanges(\"local\")}\n </Fragment>\n );\n }\n };\n\n #renderRemoteChanges = () => {\n if (this.pendingRemoteChangesCount > 0) {\n return (\n <Fragment>\n {this.#renderConfirmButton(\"remote\")}\n {this.#renderTreeChanges(\"remote\")}\n </Fragment>\n );\n }\n };\n\n render() {\n const { existsGXServerSession } = this.teamDevPreviewData;\n return (\n <Host\n class={{\n \"widget\": true,\n \"empty-state\": !this.#isTeamDevOptionsEnabled\n }}\n >\n <ch-theme model={CSS_BUNDLES} />\n {!this.#isTeamDevOptionsEnabled || !existsGXServerSession ? (\n <gx-ide-empty-state\n isAnimated={true}\n stateIconSrc={ERROR_ICON}\n stateTitle={this.#getEmptyStateTitle()}\n stateDescription={this.#getEmptyStateDescription()}\n >\n {this.#renderEmptyStateButton() && (\n <button\n class=\"button-primary empty-state-button\"\n onClick={this.#getEmptyStateButtonHandler()}\n >\n {this.#getEmptyStateButtonText()}\n </button>\n )}\n <div>\n <p class=\"body-regular-s\">\n {this.#componentLocale.emptyState.about}\n </p>\n <button\n class=\"button-tertiary button-icon-and-text team-dev-button body-semi-bold-s\"\n type=\"button\"\n onClick={this.#openTeamDevInfoHandler}\n >\n {this.#componentLocale.buttons.teamDev}\n <ch-image class=\"icon-md\" src={OPEN_WINDOW_ICON} type=\"mask\" />\n </button>\n </div>\n </gx-ide-empty-state>\n ) : (\n <div class=\"main-container spacing-body scrollable\">\n <div>\n <p class=\"giu-static-pill-icon-and-text version giu-static-pill-icon-and-text--version elevation-02\">\n <ch-image\n class=\"icon-md\"\n type=\"mask\"\n src={VERSION_ICON}\n ></ch-image>\n <span class=\"version-pill\">\n {this.teamDevPreviewData.versionName}\n </span>\n </p>\n </div>\n <ch-tab-render\n class=\"tab tab-full-width-buttons scrollable border-style-none\"\n model={this.tabModel}\n selectedId={this.selectedTabId}\n tabListPosition=\"block-start\"\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n >\n <div class=\"local-changes-container\" slot={LOCAL_CHANGES_TAB}>\n {this.#renderEmptyState(\"local\")}\n {this.#renderLocalChanges()}\n </div>\n\n <div class=\"remote-changes-container\" slot={REMOTE_CHANGES_TAB}>\n {this.#renderEmptyState(\"remote\")}\n {this.#renderRemoteChanges()}\n </div>\n </ch-tab-render>\n\n <footer class=\"control-footer-with-border open-window-container\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-tertiary button-icon-and-text open-full-dialog-button\"\n onClick={this.#openFullDialogHandler}\n >\n <ch-image\n class=\"icon-md\"\n src={OPEN_WINDOW_ICON}\n type=\"mask\"\n />\n {this.#componentLocale.footer.openFullDialog}\n </button>\n </div>\n </footer>\n </div>\n )}\n </Host>\n );\n }\n}\n\nexport type TeamDevPreviewData = {\n versionName: string;\n isFrozenVersion: boolean;\n existsGXServerSession: boolean;\n isKBOpen: boolean;\n isLinkedVersion: boolean;\n isLinkedKB: boolean;\n};\n\nexport type TeamDevPreviewMode = \"local\" | \"remote\";\n"],"mappings":";;;;;;;;;;;;;;AAAA,MAAMA,IAAoB;;;;;;;;;;;;;;;;;ACiC1B,IAAKC;;CAAL,SAAKA;EACHA,IAAA;EACAA,IAAA;EACAA,IAAA;EACAA,IAAA;EACAA,IAAA;EACAA,IAAA;AACD,EAPD,CAAKA,UAAiB;;AAStB,MAAMC,IAA8B,EAClC,qBACA,oBACA,gBACA,oBACA,iBACA,uBACA,wBACA;;AAGF,MAAMC,IAAeC,EAAY;EAC/BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAAWJ,EAAY;EAC3BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAME,IAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMG,IAAgBN,EAAY;EAChCC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMI,KAAeP,EAAY;EAC/BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMK,KAAeR,EAAY;EAC/BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMM,KAAmBT,EAAY;EACnCC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMO,KAAcV,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMQ,KAAaX,EAAY;EAC7BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMS,KAAqB;;AAC3B,MAAMC,KAAoB;;MAQbC,KAAmB;;;IAC9BC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,MAAwC;IACxCE,EAAAH,IAAAC,MAAyC;IACzCG,EAAAJ,IAAAC,WAAA;IACAI,EAAAL,IAAAC,WAAA;IACAK,EAAAN,IAAAC,WAAA;IACAM,EAAAP,IAAAC,MAAoC;IACpCO,EAAAR,IAAAC,MAA4C;IAC5CQ,EAAAT,IAAAC,WAAA;IACAS,EAAAV,IAAAC,WAAA;IAwLAU,EAAAX,IAAAC,OAAuB;MACrBW,EAAAX,MAAIO,GAAqB;QACvB,CAAC3B,EAAkBgC,WAAW;UAC5BC,OAAOC,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWC;UACxCC,aAAaH,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWG;UAC9CC,YAAYL,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQC;UAC1CC,eAAeR,EAAAd,MAAIuB,GAAA;UACnBC,YAAY;;QAEd,CAAC5C,EAAkB6C,gBAAgB;UACjCZ,OAAOC,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWC;UACxCC,aAAaH,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWW;UAC9CP,YAAYL,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQO;UAC1CL,eAAeR,EAAAd,MAAI4B,GAAA;UACnBJ,YAAY;;QAEd,CAAC5C,EAAkBiD,sBAAsB;UACvChB,OAAOC,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWe;UACxCb,aACEH,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWgB;UACnCZ,YAAYL,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQY;UAC1CV,eAAeR,EAAAd,MAAIiC,GAAA;UACnBT,YAAY;;QAEd,CAAC5C,EAAkBsD,kBAAkB;UACnCrB,OAAOC,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWoB;UACxClB,aACEH,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWqB;UACnCjB,YAAY;UACZG,eAAee;UACfb,YAAY;;QAEd,CAAC5C,EAAkB0D,gBAAgB;UACjCzB,OAAOC,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWwB;UACxCtB,aAAaH,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWyB;UAC9CrB,YAAY;UACZG,eAAee;UACfb,YAAY;;QAEd,CAAC5C,EAAkB6D,OAAO;UACxB5B,OAAO;UACPI,aAAa;UACbE,YAAY;UACZG,eAAee;UACfb,YAAY;;SAEf;AAAA;IAGHkB,EAAA3C,IAAAC,OAA2B;MACzB,IACEA,KAAK2C,mBAAmBC,YACxB5C,KAAK2C,mBAAmBE,cACxB7C,KAAK2C,mBAAmBG,oBACvB9C,KAAK2C,mBAAmBI,mBACzB/C,KAAK2C,mBAAmBK,uBACxB;QACArC,EAAAX,MAAIM,GAA4B,MAAI;QACpC;;MAEFK,EAAAX,MAAIM,GAA4B,OAAK;AAAA;IAGvC2C,EAAAlD,IAAAC,OAAekD,MAAOC;MACpB,IAAIA,MAAS,SAAS;QACpBnD,KAAKoD,sBAAsB;QAC3BzC,EAAAX,MAAIG,SAAqBH,KAAKqD,4BAA0B;QACxDvC,EAAAd,MAAIsD,GAAA,KAAuBC,KAA3BvD,MAA4B;QAC5BA,KAAKoD,sBAAsB;QAC3BzC,EAAAX,MAAIC,GAAgC,OAAK;aACpC;QACLD,KAAKwD,uBAAuB;QAC5B7C,EAAAX,MAAII,SAAqBJ,KAAKyD,6BAA2B;QACzD3C,EAAAd,MAAIsD,GAAA,KAAuBC,KAA3BvD,MAA4B;QAC5BA,KAAKwD,uBAAuB;QAC5B7C,EAAAX,MAAIE,GAAiC,OAAK;;;IAI9CoD,EAAAvD,IAAAC,OAA0BmD;;MACxB,IAAIO,IAAe;MACnB,IAAIC;MACJ,MAAMC,IAAUT,MAAS;MACzB,IAAIS,GAAS;QACX5D,KAAK6D,8BACHC,KAAAC,IAAAjD,EAAAd,MAAIG,GAAA,UAAY,QAAA4D,WAAA,aAAAA,EAAEC,sBAAgB,QAAAF,WAAA,aAAAA,EAAEG,WAAU;QAChDP,IAAe,GAAG5C,EAAAd,MAAIF,GAAA,KAAkBoE,SAASC,iBAAiBnE,KAAK6D;QACvEF,IAAO7C,EAAAd,MAAIG,GAAA,KAAa6D;aACnB;QACLhE,KAAKoE,8BACHC,KAAAC,IAAAxD,EAAAd,MAAII,GAAA,UAAY,QAAAkE,WAAA,aAAAA,EAAEC,sBAAgB,QAAAF,WAAA,aAAAA,EAAEJ,WAAU;QAChDP,IAAe,GAAG5C,EAAAd,MAAIF,GAAA,KAAkBoE,SAASM,kBAAkBxE,KAAKoE;QACxET,IAAO7C,EAAAd,MAAII,GAAA,KAAamE;;MAG1B,MAAME,IAA+B,EACnC;QACEC,IAAI;QACJC,SAASjB;QACTkB,UAAU;QACVC,OAAO;QACPC,OAAOnB,MAAI,QAAJA,WAAI,aAAJA,EAAMoB,KAAIC,MAAI;UACnBN,IAAIM,EAAKN;UACTO,aAAarB,IACRoB,EAA4B7B,KAAK+B,OACjCF,EAAwBG;UAC7BC,WAAWxB,IACP9C,EAAAd,MAAIqF,GAAA,KAAY9B,KAAhBvD,MAAkBgF,EAA4BM,SAC9CxE,EAAAd,MAAIqF,GAAA,KAAY9B,KAAhBvD,MAAkBgF,EAAwBO;UAC9CZ;;UAEEa,EAAA;YACEC,OAAO;cACLC,SAAS;;aAGXF,EAAA,cAAOR,EAAK/F,OACZuG,EAAA;YACEC,OAAO;cACLE,OAAO;cACPC,YAAY;;aAGbZ,EAAKa;UAIZC,MAAM;UACNjB,OAAO;;;MAKb,IAAIjB,GAAS;QACX5D,KAAK+F,4BAA4BtB;QACjC3D,EAAAd,MAAIgG,GAAA,KAAgBzC,KAApBvD,MAAqBJ;aAChB;QACLI,KAAKiG,6BAA6BxB;QAClC3D,EAAAd,MAAIgG,GAAA,KAAgBzC,KAApBvD,MAAqBL;;;IAIzBuG,EAAAnG,IAAAC,OAA6BkD,OAC3BiD,GACAhD;MAEA,MAAMiD,IAAkBC,MAAMC,KAAKH,EAAMI,OAAOC,UAC7CC,QAAOC,KAAQA,EAAK1B,KAAK2B,WAAWD,EAAK1B,KAAKN,OAAO,SACrDK,KAAI2B,KAAQA,EAAK1B,KAAKN;MAEzB,IAAIvB,MAAS,SAAS;QACpBnD,KAAK4G,8BAA8BR;QACnCtF,EAAAd,MAAIQ,GAAA,KAAqBqG,sBAAsB,EAAC,UAAS;UACvDlC,SAAS,GAAG7D,EAAAd,MAAIF,GAAA,KAAkBoE,SAASC,iBAAiBnE,KAAK4G,4BAA4B3C,UAAUjE,KAAK6D;;aAEzG;QACL7D,KAAK8G,+BAA+BV;QACpCtF,EAAAd,MAAIS,GAAA,KAAsBoG,sBAAsB,EAAC,UAAS;UACxDlC,SAAS,GAAG7D,EAAAd,MAAIF,GAAA,KAAkBoE,SAASM,kBAAkBxE,KAAK8G,6BAA6B7C,UAAUjE,KAAKoE;;;;IAKpHxC,EAAA7B,IAAAC,OAA0BkD;YAClBlD,KAAK+G;AAAyB;IAGtCxF,EAAAxB,IAAAC,OAA6BkD;YACrBlD,KAAKgH;AAA4B;IAGzCC,EAAAlH,IAAAC,OAAyBkD;YACjBlD,KAAKkH;AAAwB;IAGrCC,EAAApH,IAAAC,OAAwBkD;MACtBlD,KAAKoH,oBAAoB;YACnBpH,KAAKqH,eACTrH,KAAK4G,6BACL5G,KAAKsH;MAEPtH,KAAKsH,gBAAgB;MACrBtH,KAAKoH,oBAAoB;AAAK;IAGhCG,EAAAxH,IAAAC,OACEmG;MAEAnG,KAAKsH,gBAAiBnB,EAAMI,UAAqB;AAAE;IAGrDiB,EAAAzH,IAAAC,OAA8BkD;MAC5BlD,KAAKyH,kBAAkB;YACjBzH,KAAK0H,eAAe1H,KAAK8G;MAC/B9G,KAAKyH,kBAAkB;MACvBzH,KAAK8G,+BAA+B;AAAE;IAGxCa,EAAA5H,IAAAC,OAA8BkD,MAC5BiD;MAEAnG,KAAK4H,gBAAgBzB,EAAMI,OAAOsB;MAClC,IACE7H,KAAK4H,kBAAkBhI,MACvBkB,EAAAd,MAAIC,GAAA,MACJ;cACMa,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB;;MAE1B,IACEA,KAAK4H,kBAAkBjI,MACvBmB,EAAAd,MAAIE,GAAA,MACJ;cACMY,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB;;;IAI5B8H,EAAA/H,IAAAC,OAA0BkD;YAClBlD,KAAK+H;AAAyB;IAGtC9F,EAAAlC,IAAAC,OAAoBkD;YACZlD,KAAKgI;AAAmB;IAGhC3C,EAAAtF,IAAAC,OAAeiI;MACb,MAAMC,IAAU;QACdC,UAAYhJ;QACZiJ,UAAYhJ;QACZiJ,SAAWhJ;QACXiJ,YAAc/I;QACd,2BAA2BA;;MAE7B,OAAO2I,EAAQD,MAAU;AAAI;IAG/BM,EAAAxI,IAAAC,OAAyBmD;MACvB,MAAMS,IAAUT,MAAS;MACzB,IAAIS,GAAS;QACX,OACE5D,KAAKoD,wBACJpD,KAAKsH,cAAckB,OAAOvE,UAC3BjE,KAAK4G,4BAA4B3C,WAAW,KAC5CjE,KAAKoH,qBACLpH,KAAKyI;aAEF;QACL,OACEzI,KAAKwD,wBACLxD,KAAK8G,6BAA6B7C,WAAW,KAC7CjE,KAAKyH,mBACLzH,KAAKyI;;;IAKXzC,EAAAjG,IAAAC,OAAmB0I;MACjB1I,KAAK2I,WAAW3I,KAAK2I,SAAS5D,KAAI6D,KAChCA,EAAIlE,OAAOgE,I,gCAEFE,IAAG;QACN3J,MACEyJ,MAAU9I,KACN,GAAGkB,EAAAd,MAAIF,GAAA,KAAkBoE,SAASC,iBAAiBnE,KAAK6D,+BACxD,GAAG/C,EAAAd,MAAIF,GAAA,KAAkBoE,SAASM,kBAAkBxE,KAAKoE;WAEjEwE;AACL;IAgCHC,EAAA9I,IAAAC,OAAsB,MACpBc,EAAAd,MAAIO,GAAA,KAAmBP,KAAK8I,qBAAqBjI;IAEnDkI,EAAAhJ,IAAAC,OAA4B,MAC1Bc,EAAAd,MAAIO,GAAA,KAAmBP,KAAK8I,qBAAqB7H;IAEnD+H,EAAAjJ,IAAAC,OAA2B,MACzBc,EAAAd,MAAIO,GAAA,KAAmBP,KAAK8I,qBAAqB3H;IAEnD8H,EAAAlJ,IAAAC,OAA8B,MAC5Bc,EAAAd,MAAIO,GAAA,KAAmBP,KAAK8I,qBAAqBxH;IAEnD4H,EAAAnJ,IAAAC,OAA0B,MACxBc,EAAAd,MAAIO,GAAA,KAAmBP,KAAK8I,qBAAqBtH;IAEnD2H,EAAApJ,IAAAC,OAA8BmD;MAC5B,IAAIiG,IAAY;MAChB,IAAIC,IAA0B;MAC9B,IAAIC;MACJ,IAAIC;MACJ,MAAM3F,IAAUT,MAAS;MAEzB,IAAIS,GAAS;QACXwF,IAAYpJ,KAAKoD;QACjBiG,IAA0BrJ,KAAKoH;QAC/BkC,IAAgBxI,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQoI;QAC9CD,IAAmBzI,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQqI;aAC5C;QACLL,IAAYpJ,KAAKwD;QACjB6F,IAA0BrJ,KAAKyH;QAC/B6B,IAAgBxI,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQsI;QAC9CH,IAAmBzI,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQuI;;MAEnD,OACEnE,EAAA;QACEoE,OAAM;QACNzG,MAAK;QACL0G,SACEjG,IACI,MAAM9C,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB,WACxB,MAAMc,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB;QAE9B8J,UACEV,KAAaC,KAA2BrJ,KAAKyI;SAG/CjD,EAAA;QACEoE,OAAO;UACL,WAAW;UACX,eAAeR;;QAEjBW,KAAKX,IAAY3J,KAAcH;QAC/B6D,MAAK;UAGNiG,IAAYG,IAAmBD;AACzB;IAIbU,EAAAjK,IAAAC,OAAqBmD;MACnB,IAAI8G,IAAO;MACX,IAAIC,IAAU;MAEd,IAAI/G,MAAS,WAAWnD,KAAK6D,8BAA8B,GAAG;QAC5DoG,IAAO;QACPC,IAAUpJ,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWoJ;aACtC,IAAIhH,MAAS,YAAYnD,KAAKoE,8BAA8B,GAAG;QACpE6F,IAAO;QACPC,IAAUpJ,EAAAd,MAAIF,GAAA,KAAkBiB,WAAWqJ;;MAG7C,OAAOH,IACLzE,EAAA;QAAKoE,OAAM;SACTpE,EAAA;QAAGoE,OAAM;SAAkBM,IAC1BpJ,EAAAd,MAAImJ,GAAA,KAA2B5F,KAA/BvD,MAAgCmD,MAEjC;AAAI;IAGVkH,EAAAtK,IAAAC,OAAsBmD;MACpB,MAAMS,IAAUT,MAAS;MAEzB,IAAIS,GAAS;QACX,OACE4B,EAAC8E,GAAQ,MACNxJ,EAAAd,MAAImJ,GAAA,KAA2B5F,KAA/BvD,MAAgCmD,KAC/BnD,KAAKoD,wBAAwBpD,KAAKoH,qBAClC5B,EAAA;UACE+E,UAAQ;UACR5D,SAAO;UACPiD,OAAM;UACNY,OAAOxK,KAAK+F;UACZ0E,kBAAgB;UAChBC,sBAAsBvE,KACpBrF,EAAAd,MAAIkG,GAAA,KAA2B3C,KAA/BvD,MAAgCmG,GAAOhD;UAEzCwH,kBAAiB;UACjBC,eAAe;UACfC,KAAKC,KACFnK,EAAAX,MAAIQ,GAAuBsK,GAAiC;;aAMlE;QACL,OACEtF,EAAC8E,GAAQ,MACNxJ,EAAAd,MAAImJ,GAAA,KAA2B5F,KAA/BvD,MAAgCmD,KAC/BnD,KAAKwD,yBAAyBxD,KAAKyH,mBACnCjC,EAAA;UACE+E,UAAQ;UACR5D,SAAO;UACPiD,OAAM;UACNY,OAAOxK,KAAKiG;UACZwE,kBAAgB;UAChBC,sBAAsBvE,KACpBrF,EAAAd,MAAIkG,GAAA,KAA2B3C,KAA/BvD,MAAgCmG,GAAOhD;UAEzCwH,kBAAiB;UACjBC,eAAe;UACfC,KAAKC,KACFnK,EAAAX,MAAIS,GAAwBqK,GAAiC;;;;IAS5EC,EAAAhL,IAAAC,OAAwBmD;MACtB,MAAMS,IAAUT,MAAS;MACzB,IAAIkG,IAA0B;MAC9B,IAAI3E,IAAK;MACT,IAAId,GAAS;QACXyF,IAA0BrJ,KAAKoH;QAC/B1C,IAAK;aACA;QACL2E,IAA0BrJ,KAAKyH;QAC/B/C,IAAK;;MAEP,OACEc,EAAA;QACEd,IAAIA;QACJkF,OAAO;UACL,kBAAkB;UAClB,wBAAwBP;;QAE1BlG,MAAK;QACL2G,UAAUhJ,EAAAd,MAAIuI,GAAA,KAAsBhF,KAA1BvD,MAA2BmD;QACrC0G,SACEjG,IACI9C,EAAAd,MAAImH,GAAA,OACJrG,EAAAd,MAAIwH,GAAA;SAGT6B,KACC7D,EAAA;QAAUoE,OAAM;QAAsBG,KAAKtK;QAAa0D,MAAK;UAE9DkG,IACGzF,IACE9C,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQ4J,aAC9BlK,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQ6J,WAChCrH,IACE9C,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQ8J,SAC9BpK,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQ+J;AAC7B;IAIbC,EAAArL,IAAAC,OAAsB;MACpB,IAAIA,KAAK6D,4BAA4B,GAAG;QACtC,OACE2B,EAAC8E,GAAQ,MACP9E,EAAA;UACEd,IAAG;UACHkF,OAAM;UACN3B,OAAOjI,KAAKsH;UACZ+D,gBAAgBvK,EAAAd,MAAIF,GAAA,KAAkBwL,gBAAgBhE;UACtDiE,aAAazK,EAAAd,MAAIF,GAAA,KAAkB0L,aAAalE;UAChDwC,UAAU9J,KAAKoD;UACfqI,SAAS3K,EAAAd,MAAIuH,GAAA;UACbmE,WAAS;YAEV5K,EAAAd,MAAI+K,GAAA,KAAqBxH,KAAzBvD,MAA0B,UAC1Bc,EAAAd,MAAIqK,GAAA,KAAmB9G,KAAvBvD,MAAwB;;;IAMjC2L,EAAA5L,IAAAC,OAAuB;MACrB,IAAIA,KAAKoE,4BAA4B,GAAG;QACtC,OACEoB,EAAC8E,GAAQ,MACNxJ,EAAAd,MAAI+K,GAAA,KAAqBxH,KAAzBvD,MAA0B,WAC1Bc,EAAAd,MAAIqK,GAAA,KAAmB9G,KAAvBvD,MAAwB;;;gCApqBQ;+BACD;oBACV;yBAKGJ;qCAKY;qCAIA;sCAKQ;qCAKD;wCAKF;uCAKD;yBAKhB;6BAKK;2BAKF;oCAKS;;;;;;;;;;;;EAO7C,iCAAMgM;IACJ,OAAMC,aAAEA,KAAgB7L,KAAK2C;IAC7B,IAAImJ,IAAiB;IAErBhL,EAAAd,MAAI0C,GAAA,KAAyBa,KAA7BvD;IACA,IAAIc,EAAAd,MAAIK,GAAA,SAAsBwL,GAAa;MACzClL,EAAAX,MAAIK,GAAoBwL,GAAW;MACnCC,IAAiB;;IAGnB,IAAIhL,EAAAd,MAAIM,GAAA,QAA6BwL,GAAgB;YAC7C9L,KAAK+L,cAAc;YACnB/L,KAAK+L,cAAc;;;EAiD7B,uBAAMC;IACJlL,EAAAd,MAAI0C,GAAA,KAAyBa,KAA7BvD;IACAW,EAAAX,MAAIF,SAA0BmM,EAAOC,oBAAoBlM,KAAK8K,KAAG;IACjE9K,KAAK2I,WAAW,EACd;MACEjE,IAAI9E;MACJX,MAAM,GAAG6B,EAAAd,MAAIF,GAAA,KAAkBoE,SAASC;OAE1C;MACEO,IAAI/E;MACJV,MAAM,GAAG6B,EAAAd,MAAIF,GAAA,KAAkBoE,SAASM;;IAG5C1D,EAAAd,MAAIU,GAAA,KAAqB6C,KAAzBvD;;EAGF,sBAAMmM;IACJ,IAAIrL,EAAAd,MAAIM,GAAA,MAA2B;YAC3BQ,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB;MACxBW,EAAAX,MAAIE,GAAiC,MAAI;;IAE3CF,KAAKoD,sBAAsB;;;;SAO7B,mBAAM2I,CAAc5I;IAClB,MAAMS,IAAUT,MAAS;IACzB,MAAMiJ,IAAcxI,IAChB5D,KAAK4H,kBAAkBhI,KACvBI,KAAK4H,kBAAkBjI;IAE3B,KAAKyM,GAAa;MAChB,IAAIxI,GAAS;QACXjD,EAAAX,MAAIC,GAAgC,MAAI;aACnC;QACLU,EAAAX,MAAIE,GAAiC,MAAI;;MAE3C;;IAGF0D,UACU9C,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB,iBAClBc,EAAAd,MAAIiD,GAAA,KAAaM,KAAjBvD,MAAkB;;;;SAO9B,6BAAMqM,CAAwBpE;IAC5BjI,KAAKyI,2BAA2BR;;EAgR1B,iBAAAa;IACN,OAAM/F,iBACJA,GAAeC,uBACfA,GAAqBJ,UACrBA,GAAQE,iBACRA,GAAeD,YACfA,KACE7C,KAAK2C;IACT,KAAKC,GAAU;MACb,OAAOhE,EAAkBgC;;IAE3B,IAAIgC,MAAaC,GAAY;MAC3B,OAAOjE,EAAkB6C;;IAE3B,IAAImB,KAAYC,MAAeC,MAAoBE,GAAuB;MACxE,OAAOpE,EAAkBiD;;IAE3B,IAAIe,KAAYC,MAAeC,GAAiB;MAC9C,OAAOlE,EAAkBsD;;IAE3B,IAAIU,KAAYC,KAAcG,KAAyBD,GAAiB;MACtE,OAAOnE,EAAkB0D;;IAE3B,IAAIM,KAAYC,MAAeG,GAAuB;MACpD,OAAOpE,EAAkBiD;;IAE3B,OAAOjD,EAAkB6D;;EA+M3B,MAAA6J;IACE,OAAMtJ,uBAAEA,KAA0BhD,KAAK2C;IACvC,OACE6C,EAAC+G,GAAI;MACH3C,OAAO;QACL4C,QAAU;QACV,gBAAgB1L,EAAAd,MAAIM,GAAA;;OAGtBkF,EAAA;MAAUgF,OAAO3L;SACfiC,EAAAd,MAAIM,GAAA,SAA8B0C,IAClCwC,EAAA;MACEiH,YAAY;MACZC,cAAchN;MACdiN,YAAY7L,EAAAd,MAAI6I,GAAA,KAAoBtF,KAAxBvD;MACZ4M,kBAAkB9L,EAAAd,MAAI+I,GAAA,KAA0BxF,KAA9BvD;OAEjBc,EAAAd,MAAIkJ,GAAA,KAAwB3F,KAA5BvD,SACCwF,EAAA;MACEoE,OAAM;MACNC,SAAS/I,EAAAd,MAAIiJ,GAAA,KAA4B1F,KAAhCvD;OAERc,EAAAd,MAAIgJ,GAAA,KAAyBzF,KAA7BvD,QAGLwF,EAAA,aACEA,EAAA;MAAGoE,OAAM;OACN9I,EAAAd,MAAIF,GAAA,KAAkBiB,WAAW8L,QAEpCrH,EAAA;MACEoE,OAAM;MACNzG,MAAK;MACL0G,SAAS/I,EAAAd,MAAI8H,GAAA;OAEZhH,EAAAd,MAAIF,GAAA,KAAkBsB,QAAQ0L,SAC/BtH,EAAA;MAAUoE,OAAM;MAAUG,KAAKvK;MAAkB2D,MAAK;YAK5DqC,EAAA;MAAKoE,OAAM;OACTpE,EAAA,aACEA,EAAA;MAAGoE,OAAM;OACPpE,EAAA;MACEoE,OAAM;MACNzG,MAAK;MACL4G,KAAKjL;QAEP0G,EAAA;MAAMoE,OAAM;OACT5J,KAAK2C,mBAAmBkJ,gBAI/BrG,EAAA;MACEoE,OAAM;MACNY,OAAOxK,KAAK2I;MACZoE,YAAY/M,KAAK4H;MACjBoF,iBAAgB;MAChBC,sBAAsBnM,EAAAd,MAAI2H,GAAA;OAE1BnC,EAAA;MAAKoE,OAAM;MAA0BsD,MAAMtN;OACxCkB,EAAAd,MAAIgK,GAAA,KAAkBzG,KAAtBvD,MAAuB,UACvBc,EAAAd,MAAIoL,GAAA,KAAoB7H,KAAxBvD,QAGHwF,EAAA;MAAKoE,OAAM;MAA2BsD,MAAMvN;OACzCmB,EAAAd,MAAIgK,GAAA,KAAkBzG,KAAtBvD,MAAuB,WACvBc,EAAAd,MAAI2L,GAAA,KAAqBpI,KAAzBvD,SAILwF,EAAA;MAAQoE,OAAM;OACZpE,EAAA;MAAKoE,OAAM;OACTpE,EAAA;MACEoE,OAAM;MACNC,SAAS/I,EAAAd,MAAIiH,GAAA;OAEbzB,EAAA;MACEoE,OAAM;MACNG,KAAKvK;MACL2D,MAAK;QAENrC,EAAAd,MAAIF,GAAA,KAAkBqN,OAAOC"}
@@ -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,8 +132,8 @@ 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 () => {
@@ -157,7 +157,7 @@ const ne = class {
157
157
  if (e.result === "updated") {
158
158
  this.alreadyUpdatedObjectsIdsSet = new Set(this.alreadyUpdatedObjectsIdsSet).add(e.id);
159
159
  this.objectsStatusMap.set(e.id, "updated");
160
- await g(this, v, "f").markRow(e.id, false);
160
+ await g(this, w, "f").markRow(e.id, false);
161
161
  } else {
162
162
  this.objectsStatusMap.set(e.id, "pending");
163
163
  }
@@ -356,7 +356,7 @@ const ne = class {
356
356
  this.pendingAndIgnored = await this.loadCallback(t, e);
357
357
  g(this, N, "f").call(this);
358
358
  // Is is required to mark/check all objects after loadCallback.
359
- g(this, E, "f").call(this);
359
+ g(this, U, "f").call(this);
360
360
  } catch (e) {
361
361
  // Error handling for update operation
362
362
  } finally {
@@ -369,14 +369,14 @@ const ne = class {
369
369
  * Iterates through all pending object IDs and adds them to the marked objects set
370
370
  * if they are not already in the committed objects set. This effectively identifies
371
371
  * and marks all the pending objects that still need to be processed.
372
- **/ E.set(this, (() => {
372
+ **/ U.set(this, (() => {
373
373
  for (const e of this.pendingIdsSet) {
374
374
  if (!this.alreadyUpdatedObjectsIdsSet.has(e)) {
375
375
  this.markedObjectsSet = new Set([ ...this.markedObjectsSet, e ]);
376
376
  }
377
377
  }
378
378
  }));
379
- U.set(this, (() => {
379
+ E.set(this, (() => {
380
380
  // this.pendingObjectsAfterActionFilter = this.#filteredObjects(
381
381
  // this.pendingAndIgnored.pendingForUpdate
382
382
  // );
@@ -405,15 +405,15 @@ const ne = class {
405
405
  A.set(this, (() => async e => {
406
406
  e.preventDefault();
407
407
  e.stopPropagation();
408
- const t = await g(this, v, "f").getSelectedRows();
409
- const n = (await g(this, v, "f").getSelectedCell()).rowId;
408
+ const t = await g(this, w, "f").getSelectedRows();
409
+ const n = (await g(this, w, "f").getSelectedCell()).rowId;
410
410
  const i = this.pendingIdsSet.has(n) ? "pending" : "ignored";
411
411
  let a = [];
412
412
  // remove selected rows from the other source, if any.
413
413
  if (t.length > 1 && i === "pending") {
414
414
  t.forEach((async e => {
415
415
  if (this.ignoredIdsSet.has(e)) {
416
- await g(this, v, "f").selectRow(e, false);
416
+ await g(this, w, "f").selectRow(e, false);
417
417
  } else {
418
418
  a.push(e);
419
419
  }
@@ -421,7 +421,7 @@ const ne = class {
421
421
  } else if (t.length > 1 && i === "ignored") {
422
422
  t.forEach((async e => {
423
423
  if (this.pendingIdsSet.has(e)) {
424
- await g(this, v, "f").selectRow(e, false);
424
+ await g(this, w, "f").selectRow(e, false);
425
425
  } else {
426
426
  a.push(e);
427
427
  }
@@ -436,26 +436,26 @@ const ne = class {
436
436
  });
437
437
  }));
438
438
  L.set(this, (async (e, t) => {
439
- if (g(this, v, "f")) {
439
+ if (g(this, w, "f")) {
440
440
  for (const t of e) {
441
- await g(this, v, "f").markRow(t, false);
441
+ await g(this, w, "f").markRow(t, false);
442
442
  }
443
443
  for (const e of t) {
444
- await g(this, v, "f").markRow(e, true);
444
+ await g(this, w, "f").markRow(e, true);
445
445
  }
446
446
  }
447
447
  }));
448
448
  P.set(this, (async e => {
449
- if (g(this, v, "f")) {
449
+ if (g(this, w, "f")) {
450
450
  const t = e.itemsToCheck;
451
451
  const n = e.itemsToUncheck;
452
452
  // check
453
453
  for (const e of t) {
454
- await g(this, v, "f").markRow(e, true);
454
+ await g(this, w, "f").markRow(e, true);
455
455
  }
456
456
  // uncheck
457
457
  for (const e of n) {
458
- await g(this, v, "f").markRow(e, false);
458
+ await g(this, w, "f").markRow(e, false);
459
459
  }
460
460
  }
461
461
  }));
@@ -481,10 +481,10 @@ const ne = class {
481
481
  */ D.set(this, (async e => {
482
482
  const t = e.detail;
483
483
  if (t) {
484
- const e = await g(this, v, "f").getMarkedRows();
484
+ const e = await g(this, w, "f").getMarkedRows();
485
485
  const t = e.filter((e => this.ignoredIdsSet.has(e)));
486
486
  if (t.length) {
487
- s(t, g(this, v, "f"));
487
+ s(t, g(this, w, "f"));
488
488
  }
489
489
  }
490
490
  }));
@@ -503,6 +503,7 @@ const ne = class {
503
503
  this.kbPropertiesChecked = false;
504
504
  this.typesComboBoxModel = undefined;
505
505
  this.selectedType = undefined;
506
+ this.isUpdateDisabled = false;
506
507
  this.objectsStatusMap = new Map;
507
508
  this.contextMenuCallback = undefined;
508
509
  this.pendingAndIgnored = {
@@ -547,11 +548,11 @@ const ne = class {
547
548
  this.pendingAndIgnored.ignoredObjects.forEach((e => {
548
549
  this.ignoredIdsSet.add(e.id);
549
550
  }));
550
- g(this, E, "f").call(this);
551
+ g(this, U, "f").call(this);
551
552
  // after pendingIdsSet.add and ignoredIdsSet.add
552
553
  g(this, N, "f").call(this);
553
554
  // after pendingIdsSet.add and ignoredIdsSet.add
554
- g(this, U, "f").call(this);
555
+ g(this, E, "f").call(this);
555
556
  }
556
557
  async componentWillLoad() {
557
558
  var e;
@@ -585,10 +586,15 @@ const ne = class {
585
586
  /**
586
587
  * Used by the host to instruct the component to force a data reload in the grids.
587
588
  */ async reload() {
588
- g(this, O, "f").call(this, true);
589
+ await g(this, O, "f").call(this, true);
590
+ }
591
+ /**
592
+ * Used by the host to instruct the component to disable the update button.
593
+ */ async disableUpdate(e) {
594
+ this.isUpdateDisabled = e;
589
595
  }
590
596
  render() {
591
- const e = this.updating || this.loading;
597
+ const e = this.updating || this.loading || this.isUpdateDisabled;
592
598
  const i = this.pendingObjectsAfterActionFilter.length === 0 && this.ignoredObjectsAfterActionFilter.length === 0;
593
599
  return t(n, {
594
600
  class: "widget"
@@ -686,7 +692,7 @@ const ne = class {
686
692
  // update button
687
693
  class: "button-primary button-update",
688
694
  disabled: !this.atLeastOneObjectIsChecked || e,
689
- onClick: g(this, w, "f")
695
+ onClick: g(this, v, "f")
690
696
  }, g(this, m, "f").filter.update)))), t("div", {
691
697
  class: "main spacing-body"
692
698
  }, !this.loading ? t("ch-tabular-grid", {
@@ -700,7 +706,7 @@ const ne = class {
700
706
  rowSelectionMode: "multiple",
701
707
  onRowMarkingChanged: g(this, j, "f"),
702
708
  onRowContextMenu: g(this, A, "f").call(this),
703
- ref: e => f(this, v, e, "f")
709
+ ref: e => f(this, w, e, "f")
704
710
  }, t("ch-tabular-grid-columnset", {
705
711
  class: "tabular-grid-column-set"
706
712
  }, t("ch-tabular-grid-column", {
@@ -794,14 +800,14 @@ const ne = class {
794
800
  }
795
801
  };
796
802
 
797
- m = new WeakMap, b = new WeakMap, _ = new WeakMap, v = new WeakMap, w = new WeakMap,
803
+ m = new WeakMap, b = new WeakMap, _ = new WeakMap, w = new WeakMap, v = new WeakMap,
798
804
  y = new WeakMap, k = new WeakMap, x = new WeakMap, M = new WeakMap, z = new WeakMap,
799
805
  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,
806
+ T = new WeakMap, N = new WeakMap, O = new WeakMap, U = new WeakMap, E = new WeakMap,
801
807
  A = new WeakMap, L = new WeakMap, P = new WeakMap, R = new WeakMap, $ = new WeakMap,
802
808
  D = new WeakMap;
803
809
 
804
810
  ne.style = u;
805
811
 
806
812
  export { ne as gx_ide_team_dev_update };
807
- //# sourceMappingURL=p-3d71b287.entry.js.map
813
+ //# sourceMappingURL=p-9285b6db.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","__classPrivateFieldSet","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","addedRowsIds","addedRowsId","removedRowsId","pendingItemCheckedResult","pendingItemsCheckedCallback","itemsChecked","itemsUnchecked","undefined","_GxIdeTeamDevUpdate_revertPendingCommitsCheckboxes","_GxIdeTeamDevUpdate_togglePendingCommitsCheckboxes","_GxIdeTeamDevUpdate_searchInputHandler","searchValue","_GxIdeTeamDevUpdate_actionChangedHandler","selectedAction","_GxIdeTeamDevUpdate_typeChangedHandler","selectedType","_GxIdeTeamDevUpdate_setInitialObjectsStatus","pendingAndIgnored","pendingForUpdate","pendingObject","_a","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.#rowCheckedChangedByTheUser = false;\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 const addedRowsIds = event.detail.addedRowsId;\n const removedRowsId = event.detail.removedRowsId;\n\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 };\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":"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"}
@@ -112,7 +112,7 @@ var u = undefined && undefined.__classPrivateFieldSet || function(t, i, e, s, r)
112
112
  return s === "a" ? r.call(t, e) : r ? r.value = e : i.set(t, e), e;
113
113
  };
114
114
 
115
- var b, v, _, w, y, x, k, M, j, C, W, S, z, I, A, T, O, N, E, L, P, D, R, F, G, H, U;
115
+ var b, v, _, w, y, x, k, M, C, j, W, S, z, I, A, T, O, N, E, L, P, D, R, F, G, H, U;
116
116
 
117
117
  const X = "filters-secondary-container";
118
118
 
@@ -190,14 +190,14 @@ const q = class {
190
190
  g(this, L, "f").call(this, t);
191
191
  }
192
192
  }));
193
- j.set(this, (async t => {
193
+ C.set(this, (async t => {
194
194
  const i = t.detail.rowsId;
195
195
  const e = i[0];
196
196
  const s = this.pendingIdsSet.has(e) ? "pending" : "ignored";
197
197
  const r = clearGridSelection(s, i, this.pendingIdsSet, this.ignoredIdsSet, g(this, w, "f"));
198
198
  await this.selectCallback(s, r);
199
199
  }));
200
- C.set(this, (t => {
200
+ j.set(this, (t => {
201
201
  this.commentsValue = t.detail;
202
202
  if (this.commentsValue.length && this.commentInputHasError) {
203
203
  // remove error style and tooltip
@@ -413,6 +413,7 @@ const q = class {
413
413
  this.selectedFolder = undefined;
414
414
  this.selectedCategory = undefined;
415
415
  this.foldersComboBoxModel = undefined;
416
+ this.isCommitDisabled = false;
416
417
  this.commitCallback = undefined;
417
418
  this.objectsContextMenuCallback = undefined;
418
419
  this.loadCallback = undefined;
@@ -515,11 +516,16 @@ const q = class {
515
516
  */ async reload() {
516
517
  await g(this, D, "f").call(this);
517
518
  }
519
+ /**
520
+ * Used by the host to instruct the component to disable the commit button.
521
+ */ async disableCommit(t) {
522
+ this.isCommitDisabled = t;
523
+ }
518
524
  render() {
519
- const i = this.committing || this.loading;
525
+ const i = this.committing || this.loading || this.isCommitDisabled;
520
526
  const s = this.pendingObjectsAfterFilter.length === 0 && this.ignoredObjectsAfterFilter.length === 0;
521
527
  const r = this.filterSecondaryHasConditions ? d.filterWithConditions : d.filter;
522
- const a = this.atLeastOneObjectIsChecked && this.commentsValue.length > 0 && !this.allPendingAreCommitted;
528
+ const a = this.atLeastOneObjectIsChecked && this.commentsValue.length > 0 && !this.allPendingAreCommitted && !this.isCommitDisabled;
523
529
  return t(e, {
524
530
  class: "widget"
525
531
  }, t("ch-theme", {
@@ -629,7 +635,7 @@ const q = class {
629
635
  multiline: true,
630
636
  autoGrow: true,
631
637
  placeholder: g(this, b, "f").commitCommentPlaceholder,
632
- onInput: g(this, C, "f"),
638
+ onInput: g(this, j, "f"),
633
639
  value: this.commentsValue
634
640
  })), t("div", {
635
641
  class: l.MAIN
@@ -642,7 +648,7 @@ const q = class {
642
648
  },
643
649
  keyboardNavigationMode: "focus",
644
650
  rowSelectionMode: "multiple",
645
- onSelectionChanged: g(this, j, "f"),
651
+ onSelectionChanged: g(this, C, "f"),
646
652
  onRowMarkingChanged: g(this, M, "f"),
647
653
  onRowContextMenu: g(this, E, "f").call(this),
648
654
  ref: t => u(this, w, t, "f")
@@ -689,7 +695,7 @@ const q = class {
689
695
  };
690
696
 
691
697
  b = new WeakMap, v = new WeakMap, _ = new WeakMap, w = new WeakMap, y = new WeakMap,
692
- x = new WeakMap, k = new WeakMap, M = new WeakMap, j = new WeakMap, C = new WeakMap,
698
+ x = new WeakMap, k = new WeakMap, M = new WeakMap, C = new WeakMap, j = new WeakMap,
693
699
  W = new WeakMap, S = new WeakMap, z = new WeakMap, I = new WeakMap, A = new WeakMap,
694
700
  T = new WeakMap, O = new WeakMap, N = new WeakMap, E = new WeakMap, L = new WeakMap,
695
701
  P = new WeakMap, D = new WeakMap, R = new WeakMap, F = new WeakMap, G = new WeakMap,
@@ -698,4 +704,4 @@ H = new WeakMap, U = new WeakMap;
698
704
  q.style = m;
699
705
 
700
706
  export { q as gx_ide_team_dev_commit };
701
- //# sourceMappingURL=p-73c3f9ec.entry.js.map
707
+ //# sourceMappingURL=p-c8b0004e.entry.js.map