@genexus/genexus-ide-ui 1.1.39 → 1.1.41
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.
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-server-selector.cjs.entry.js +12 -28
- package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/{gx-ide-status-message.cjs.entry.js → gx-ide-sign-in-result.cjs.entry.js} +10 -9
- package/dist/cjs/gx-ide-sign-in-result.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +20 -4
- package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +99 -238
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +9 -7
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +60 -10
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/tabular-grid-column-sort-5ca06dc1.js +43 -0
- package/dist/cjs/tabular-grid-column-sort-5ca06dc1.js.map +1 -0
- package/dist/cjs/tabular-grid-render-4350dbaf.js +223 -0
- package/dist/cjs/tabular-grid-render-4350dbaf.js.map +1 -0
- package/dist/cjs/uncheck-ignored-77ca69fe.js +43 -0
- package/dist/cjs/uncheck-ignored-77ca69fe.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/common/chameleon/tabular-grid-column-sort.js +39 -0
- package/dist/collection/common/chameleon/tabular-grid-column-sort.js.map +1 -0
- package/dist/collection/components/{status-message/status-message.css → sign-in-result/sign-in-result.css} +2 -0
- package/dist/collection/components/{status-message/status-message.js → sign-in-result/sign-in-result.js} +10 -9
- package/dist/collection/components/sign-in-result/sign-in-result.js.map +1 -0
- package/dist/collection/components/team-dev/bring-changes/bring-changes.js +18 -4
- package/dist/collection/components/team-dev/bring-changes/bring-changes.js.map +1 -1
- package/dist/collection/components/team-dev/history/history.js +10 -8
- package/dist/collection/components/team-dev/history/history.js.map +1 -1
- package/dist/collection/components/team-dev/server-selector/server-selector.css +18 -14
- package/dist/collection/components/team-dev/server-selector/server-selector.js +11 -27
- package/dist/collection/components/team-dev/server-selector/server-selector.js.map +1 -1
- package/dist/collection/components/team-dev/update/update.css +1 -0
- package/dist/collection/components/team-dev/update/update.js +62 -9
- package/dist/collection/components/team-dev/update/update.js.map +1 -1
- package/dist/collection/components/team-dev/version-control/commit/commit.css +1 -0
- package/dist/collection/components/team-dev/version-control/commit/commit.js +79 -20
- package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
- package/dist/collection/components/team-dev/version-control/common/are-sets-equal.js +21 -0
- package/dist/collection/components/team-dev/version-control/common/are-sets-equal.js.map +1 -0
- package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js +13 -3
- package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js.map +1 -1
- package/dist/collection/components/team-dev/version-control/common/uncheck-ignored.js +18 -0
- package/dist/collection/components/team-dev/version-control/common/uncheck-ignored.js.map +1 -0
- package/dist/collection/testing/locale.e2e.js +1 -1
- package/dist/collection/testing/locale.e2e.js.map +1 -1
- package/dist/components/gx-ide-server-selector.js +12 -28
- package/dist/components/gx-ide-server-selector.js.map +1 -1
- package/dist/components/{gx-ide-status-message.d.ts → gx-ide-sign-in-result.d.ts} +4 -4
- package/dist/components/{gx-ide-status-message.js → gx-ide-sign-in-result.js} +15 -14
- package/dist/components/gx-ide-sign-in-result.js.map +1 -0
- package/dist/components/gx-ide-team-dev-bring-changes.js +18 -4
- package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
- package/dist/components/gx-ide-team-dev-commit.js +78 -221
- package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
- package/dist/components/gx-ide-team-dev-history.js +9 -7
- package/dist/components/gx-ide-team-dev-history.js.map +1 -1
- package/dist/components/gx-ide-team-dev-update.js +61 -10
- package/dist/components/gx-ide-team-dev-update.js.map +1 -1
- package/dist/components/tabular-grid-column-sort.js +41 -0
- package/dist/components/tabular-grid-column-sort.js.map +1 -0
- package/dist/components/tabular-grid-render.js +216 -0
- package/dist/components/tabular-grid-render.js.map +1 -0
- package/dist/components/uncheck-ignored.js +40 -0
- package/dist/components/uncheck-ignored.js.map +1 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-server-selector.entry.js +12 -28
- package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
- package/dist/esm/{gx-ide-status-message.entry.js → gx-ide-sign-in-result.entry.js} +10 -9
- package/dist/esm/gx-ide-sign-in-result.entry.js.map +1 -0
- package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +20 -4
- package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-commit.entry.js +81 -220
- package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-history.entry.js +9 -7
- package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js +60 -10
- package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/tabular-grid-column-sort-1d503b27.js +41 -0
- package/dist/esm/tabular-grid-column-sort-1d503b27.js.map +1 -0
- package/dist/esm/tabular-grid-render-f7eb612b.js +216 -0
- package/dist/esm/tabular-grid-render-f7eb612b.js.map +1 -0
- package/dist/esm/uncheck-ignored-4ba48c9e.js +40 -0
- package/dist/esm/uncheck-ignored-4ba48c9e.js.map +1 -0
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/p-02fb496a.js +36 -0
- package/dist/genexus-ide-ui/p-02fb496a.js.map +1 -0
- package/dist/genexus-ide-ui/p-06e8d9d6.entry.js +63 -0
- package/dist/genexus-ide-ui/p-06e8d9d6.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-585fac4a.entry.js → p-2b38e18e.entry.js} +15 -13
- package/dist/genexus-ide-ui/p-2b38e18e.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-970e89ac.entry.js → p-4b06b578.entry.js} +100 -115
- package/dist/genexus-ide-ui/p-4b06b578.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-34447b77.entry.js → p-4e3ad78d.entry.js} +261 -234
- package/dist/genexus-ide-ui/p-4e3ad78d.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-77c2e69d.js +314 -0
- package/dist/genexus-ide-ui/p-77c2e69d.js.map +1 -0
- package/dist/genexus-ide-ui/p-a7883e6b.entry.js +691 -0
- package/dist/genexus-ide-ui/p-a7883e6b.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-c9b9e260.js +36 -0
- package/dist/genexus-ide-ui/p-c9b9e260.js.map +1 -0
- package/dist/genexus-ide-ui/{p-42f37527.entry.js → p-e1a2550e.entry.js} +351 -289
- package/dist/genexus-ide-ui/p-e1a2550e.entry.js.map +1 -0
- package/dist/types/common/chameleon/tabular-grid-column-sort.d.ts +4 -0
- package/dist/types/components/{status-message/status-message.d.ts → sign-in-result/sign-in-result.d.ts} +2 -2
- package/dist/types/components/team-dev/history/history.d.ts +2 -2
- package/dist/types/components/team-dev/update/update.d.ts +6 -0
- package/dist/types/components/team-dev/version-control/commit/commit.d.ts +15 -13
- package/dist/types/components/team-dev/version-control/common/are-sets-equal.d.ts +12 -0
- package/dist/types/components/team-dev/version-control/common/tabular-grid-render.d.ts +13 -1
- package/dist/types/components/team-dev/version-control/common/uncheck-ignored.d.ts +13 -0
- package/dist/types/components.d.ts +13 -13
- package/package.json +1 -1
- package/dist/cjs/gx-ide-status-message.cjs.entry.js.map +0 -1
- package/dist/collection/components/status-message/status-message.js.map +0 -1
- package/dist/components/gx-ide-status-message.js.map +0 -1
- package/dist/esm/gx-ide-status-message.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-34447b77.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-42f37527.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-50253b96.entry.js +0 -61
- package/dist/genexus-ide-ui/p-50253b96.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-585fac4a.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-723d25ae.entry.js +0 -912
- package/dist/genexus-ide-ui/p-723d25ae.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-970e89ac.entry.js.map +0 -1
- /package/dist/collection/components/{status-message/gx-ide-assets/status-message → sign-in-result/gx-ide-assets/sign-in-result}/images/genexus-next-logo.svg +0 -0
- /package/dist/collection/components/{status-message/gx-ide-assets/status-message → sign-in-result/gx-ide-assets/sign-in-result}/images/left-side-illustration.svg +0 -0
- /package/dist/collection/components/{status-message/gx-ide-assets/status-message → sign-in-result/gx-ide-assets/sign-in-result}/images/right-side-illustration.svg +0 -0
- /package/dist/collection/components/{status-message/gx-ide-assets/status-message/langs/status-message.lang.en.json → sign-in-result/gx-ide-assets/sign-in-result/langs/sign-in-result.lang.en.json} +0 -0
- /package/dist/collection/components/{status-message/gx-ide-assets/status-message/langs/status-message.lang.ja.json → sign-in-result/gx-ide-assets/sign-in-result/langs/sign-in-result.lang.ja.json} +0 -0
- /package/dist/collection/components/{status-message/gx-ide-assets/status-message/langs/status-message.lang.zh.json → sign-in-result/gx-ide-assets/sign-in-result/langs/sign-in-result.lang.zh.json} +0 -0
- /package/dist/genexus-ide-ui/gx-ide-assets/{status-message → sign-in-result}/images/genexus-next-logo.svg +0 -0
- /package/dist/genexus-ide-ui/gx-ide-assets/{status-message → sign-in-result}/images/left-side-illustration.svg +0 -0
- /package/dist/genexus-ide-ui/gx-ide-assets/{status-message → sign-in-result}/images/right-side-illustration.svg +0 -0
- /package/dist/genexus-ide-ui/gx-ide-assets/{status-message/langs/status-message.lang.en.json → sign-in-result/langs/sign-in-result.lang.en.json} +0 -0
- /package/dist/genexus-ide-ui/gx-ide-assets/{status-message/langs/status-message.lang.ja.json → sign-in-result/langs/sign-in-result.lang.ja.json} +0 -0
- /package/dist/genexus-ide-ui/gx-ide-assets/{status-message/langs/status-message.lang.zh.json → sign-in-result/langs/sign-in-result.lang.zh.json} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["bringChangesCss","CSS_BUNDLES","COMBO_BOX_ALL_VALUE","DETAIL_LABEL_CLASSES","ADD_ICON","getIconPath","category","name","colorType","EDITED_ICON","FILTER_ICON","SEARCH_ICON","SUBSTRACT_ICON","WARNING_ICON","ERROR_ICON","GxIdeTeamDevBringChanges","_GxIdeTeamDevBringChanges_componentLocale","set","this","_GxIdeTeamDevBringChanges_commitLabel","_GxIdeTeamDevBringChanges_comboBoxStatesModel","_GxIdeTeamDevBringChanges_checkedObjectsIdsArray","_GxIdeTeamDevBringChanges_formatComments","commitInformation","length","comment","mergedComment","map","commit","i","isLast","afterCommentBreakline","id","_GxIdeTeamDevBringChanges_mergeCheckedClickedHandler","async","merging","newobjectsStatesMap","Map","objectsStatesMap","__classPrivateFieldGet","forEach","checkedObjectId","operationType","mergeObjectsCallback","_GxIdeTeamDevBringChanges_mergeSingleObject","objectId","_GxIdeTeamDevBringChanges_renderActionCellContent","actionTaken","icon","caption","iconColor","objects","actions","delete","insert","modify","h","class","type","src","style","backgroundColor","_GxIdeTeamDevBringChanges_renderCommitsNumbers","onlyNumbers","_a","_b","loading","_GxIdeTeamDevBringChanges_renderFormatedDate","date","dateObject","Date","lang","navigator","languages","language","toLocaleDateString","toLocaleTimeString","hour","minute","hour12","_GxIdeTeamDevBringChanges_renderObjectStateWithIcon","objectType","states","reverting","classes","revertPillAsButton","onClick","call","statesForButton","_GxIdeTeamDevBringChanges_renderObjectsRows","objectsFiltered","commitObject","marked","markedObjectsSet","has","alreadyMerged","alreadyMergedObjectsIdsArray","find","errorOrWarningMessage","commitObjectsMessagesMap","get","state","MESSAGE_ICON","key","rowid","ref","el","setAttribute","size","renderObjectTypeWithIcon","description","_GxIdeTeamDevBringChanges_rowContextMenuHandler","ev","preventDefault","selectedRowsIds","tabularGridEl","getSelectedRows","contextMenuCallback","selection","clientX","detail","clientY","_GxIdeTeamDevBringChanges_rowMarkingChangedHandler","event","newobjectsMarkedSet","Set","markedRowsIds","rowsId","checkedObjectsIgnoringAlreadyMerged","filter","markedObjectId","includes","__classPrivateFieldSet","add","atLeastOneObjectIsChecked","objectCurrentState","markedRowIndex","findIndex","splice","_GxIdeTeamDevBringChanges_searchInputHandler","searchValue","toLowerCase","_GxIdeTeamDevBringChanges_updateFilteredObjects","_GxIdeTeamDevBringChanges_stateChangedHandler","stateFilterValue","filteredObjects","commitObjects","object","objectState","includesName","includesType","includesDescription","objectsStatesMapChanged","newCommitObjectsStateMap","someObjectIsMerging","entries","commitObjectsChanged","newCommitObjects","componentWillLoad","Locale","getComponentStrings","commmits","commmit","all","value","warning","error","reverted","merged","updateObjectState","newState","message","checkedObject","push","markRow","render","enableRichRowSelector","disableControls","Host","model","commitDetail","revertChangesDetail","bringChangesDetail","genexusServer","href","target","knowledgeBase","currentVersion","mergeFromVersion","title","ids","from","to","htmlFor","comments","multiline","readonly","hideFilters","disabled","startImgSrc","placeholder","searchPlaceholder","onInput","statePlaceholder","revertSelected","mergeSelected","keyboardNavigationMode","rowSelectionMode","onRowMarkingChanged","onRowContextMenu","columnId","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","config","tabularGrid","colSize","action","status","isAnimated","stateIconSrc","stateTitle","cancelLabel","loader","loaderTitle","show"],"sources":["src/components/team-dev/bring-changes/bring-changes.scss?tag=gx-ide-team-dev-bring-changes&encapsulation=shadow","src/components/team-dev/bring-changes/bring-changes.tsx"],"sourcesContent":["@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-inline-sizes {\n max-inline-size: 250px;\n min-inline-size: 180px;\n}\n%header-item-common {\n padding-inline: $header-item-common-inline-padding;\n border-inline-end: $header-item-common-separator-border;\n @extend %header-item-common-inline-sizes;\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 gap: 24px;\n}\n\n// header detail\n.header__detail {\n display: grid;\n grid-template-areas:\n \"detail-title detail-title detail-title detail-title\"\n \"detail-commit-name detail-commit-name detail-commit-name detail-commit-name\"\n \"detail-genexus-server detail-knowledge-base detail-current-version detail-merge-from-version\";\n row-gap: 16px;\n // grid-auto-columns: max-content;\n // grid-template-columns: max-content auto auto auto;\n grid-template-columns: minmax(250px, 350px) repeat(3, minmax(180px, 250px));\n}\n.detail__label {\n color: var(--mer-color__neutral-gray--400);\n}\n.detail__title {\n grid-area: detail-title;\n}\n.detail__commit-name {\n grid-area: detail-commit-name;\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__current-version {\n grid-area: detail-current-version;\n @extend %header-item-common;\n}\n.detail__merge-from-version {\n grid-area: detail-merge-from-version;\n @extend %header-item-common-end;\n}\n\n// header information\n.header__information {\n display: grid;\n row-gap: 10px;\n grid-template-areas:\n \"information-title information-title\"\n \"information-col-1 information-col-2\";\n grid-template-columns: max-content 1fr;\n grid-template-rows: max-content 64px;\n}\n.information__title {\n grid-area: information-title;\n}\n.information__col-1 {\n grid-area: information-col-1;\n display: flex;\n gap: 24px;\n @extend %header-item-common-start;\n}\n.information__col-2 {\n display: grid;\n grid-area: information-col-2;\n @extend %header-item-common-end;\n}\n\n// filter / controls-container\n.controls-container {\n display: grid;\n margin-block-start: 24px;\n}\n.filter {\n grid-template-columns: 232px 186px 1fr;\n gap: 12px;\n}\n.button-merge-checked {\n margin-inline-start: auto;\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.warning-error-description {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px;\n max-inline-size: 800px;\n line-height: 1.5; // WA. Line height looks too tight.\n}\n.warning-error-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 &--to-merge,\n &--to-revert {\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 &--to-merge-marked {\n --pill-background-color: var();\n --pill-color: var(--mer-border-color__primary);\n --pill-border-color: var();\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 &--merged,\n &--reverted {\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.merging-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}\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: 400px;\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 ChEditCustomEvent,\n TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { ObjectType } from \"../../../components\";\n\nimport { config } from \"../../../common/config\";\n\nimport { ContextMenuCallback } from \"../../../components\";\n\nimport { renderObjectTypeWithIcon } from \"../common/utilities\";\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 COMBO_BOX_ALL_VALUE = \"all\";\n\nconst DETAIL_LABEL_CLASSES = \"detail__label body-semi-bold-s\";\n\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});\n\n@Component({\n tag: \"gx-ide-team-dev-bring-changes\",\n styleUrl: \"bring-changes.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-bring-changes\"]\n})\nexport class GxIdeTeamDevBringChanges {\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 #commitLabel: string;\n #comboBoxStatesModel: { caption: string; value: ObjectStateForFilter }[];\n #checkedObjectsIdsArray: string[] = [];\n\n @Element() el: HTMLGxIdeTeamDevBringChangesElement;\n\n private tabularGridEl!: HTMLChTabularGridElement;\n\n /**\n * An array that holds the id's of the objects that have been merged already.\n */\n @State() alreadyMergedObjectsIdsArray: string[] = [];\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 * It hols a boolean indicating if at least one object from the tabular-grid is checked, for merging.\n */\n @State() objectsFiltered: CommitObject[] = [];\n\n /**\n * The current search filter value\n */\n @State() searchValue: string = \"\";\n\n /**\n * The current state filter value\n */\n @State() stateFilterValue: ObjectStateForFilter = COMBO_BOX_ALL_VALUE;\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\n /**\n * A map that holds the current commit objects states (\"pending\" | \"warning\" | \"error\" | \"merged\" | \"reverted\")\n */\n @State() objectsStatesMap: Map<string, ObjectState> = new Map();\n @Watch(\"objectsStatesMap\")\n objectsStatesMapChanged(newCommitObjectsStateMap: Map<string, ObjectState>) {\n const someObjectIsMerging = [...newCommitObjectsStateMap.entries()].find(\n ([, state]) => state === \"merging\" || state === \"reverting\"\n );\n\n if (!someObjectIsMerging) {\n this.merging = false;\n }\n }\n\n /**\n * A map that holds object messages, if any, for objects that could not be merged (these objects are in a \"warning\" or \"error\" state)\n */\n @State() commitObjectsMessagesMap: Map<string, string> = 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() merging: boolean = false;\n\n /**\n * Detail about the commit\n */\n @Prop() readonly commitDetail: CommitDetail;\n\n /**\n * Commit information\n */\n @Prop() readonly commitInformation: CommitInformation[] = [];\n\n /**\n * Array of commit\n */\n @Prop() readonly commitObjects: CommitObject[] = [];\n @Watch(\"commitObjects\")\n commitObjectsChanged(newCommitObjects: CommitObject[]) {\n if (newCommitObjects.length) {\n // This is the first and only objects asignment\n this.loading = false;\n\n // All commit objects begin as \"pending to merge\"\n newCommitObjects.forEach(commitObject => {\n this.objectsStatesMap.set(\n commitObject.id,\n this.operationType === \"revert\" ? \"to-revert\" : \"to-merge\"\n );\n });\n\n this.objectsFiltered = this.commitObjects;\n }\n }\n\n /**\n * Determines whether the filters are rendered or not.\n */\n @Prop() readonly hideFilters: boolean = false;\n\n /**\n * The type of operation to perform: \"merge\" or \"revert\".\n */\n @Prop() readonly operationType: OperationType = \"merge\";\n\n /**\n * The callback that is triggered when the user wants to merge more than one commit.\n */\n @Prop() readonly mergeObjectsCallback!: MergeObjectsCallback;\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 revertPillAsButton: boolean = false;\n\n /**\n * Invoked when user activates the context menu on th grid.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#commitLabel =\n this.commitInformation.length > 1\n ? this.#componentLocale.commmits\n : this.#componentLocale.commmit;\n\n // Initiate \"states\" combo box filter\n this.#comboBoxStatesModel = [\n {\n caption: this.#componentLocale.states.all,\n value: COMBO_BOX_ALL_VALUE\n },\n {\n caption:\n this.operationType === \"revert\"\n ? this.#componentLocale.states[\"to-revert\"]\n : this.#componentLocale.states[\"to-merge\"],\n value: this.operationType === \"revert\" ? \"to-revert\" : \"to-merge\"\n },\n {\n caption: this.#componentLocale.states.warning,\n value: \"warning\"\n },\n {\n caption: this.#componentLocale.states.error,\n value: \"error\"\n },\n {\n caption:\n this.operationType === \"revert\"\n ? this.#componentLocale.states.reverted\n : this.#componentLocale.states.merged,\n value: this.operationType === \"revert\" ? \"reverted\" : \"merged\"\n }\n ];\n\n if (this.commitObjects?.length) {\n // if commitObjects already set...\n this.commitObjectsChanged(this.commitObjects);\n }\n }\n\n #formatComments = (): string => {\n if (this.commitInformation.length === 1) {\n // return comment without revison number\n return this.commitInformation[0].comment;\n }\n\n // return comments with revison number\n let mergedComment = \"\";\n this.commitInformation.map((commit, i) => {\n const isLast = i === this.commitInformation.length - 1;\n const afterCommentBreakline = isLast ? \"\" : \"\\n\\n\";\n mergedComment += `Commit ${commit.id}:\\n${commit.comment}${afterCommentBreakline}`;\n });\n\n return mergedComment;\n };\n\n #mergeCheckedClickedHandler = async () => {\n this.merging = true;\n const newobjectsStatesMap = new Map(this.objectsStatesMap);\n this.#checkedObjectsIdsArray.forEach(checkedObjectId => {\n newobjectsStatesMap.set(\n checkedObjectId,\n this.operationType === \"revert\" ? \"reverting\" : \"merging\"\n );\n });\n\n this.objectsStatesMap = newobjectsStatesMap;\n await this.mergeObjectsCallback(this.#checkedObjectsIdsArray);\n };\n\n #mergeSingleObject: (objectId: string) => () => void =\n objectId => async () => {\n this.merging = true;\n const newobjectsStatesMap = new Map(this.objectsStatesMap);\n newobjectsStatesMap.set(\n objectId,\n this.operationType === \"revert\" ? \"reverting\" : \"merging\"\n );\n this.objectsStatesMap = newobjectsStatesMap;\n await this.mergeObjectsCallback([objectId]);\n };\n\n #renderActionCellContent = (\n actionTaken: ObjectActionTaken\n ): JSX.Element[] => {\n let icon: string;\n let caption: string;\n let iconColor: string;\n\n if (actionTaken === \"Deleted\") {\n icon = SUBSTRACT_ICON;\n caption = this.#componentLocale.objects.actions.delete;\n iconColor = \"--mer-icon__error\";\n } else if (actionTaken === \"Inserted\") {\n icon = ADD_ICON;\n caption = this.#componentLocale.objects.actions.insert;\n iconColor = \"--mer-icon__success\";\n } else {\n // modified\n icon = EDITED_ICON;\n caption = this.#componentLocale.objects.actions.modify;\n iconColor = \"--mer-icon__warning\";\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 #renderCommitsNumbers = (onlyNumbers: boolean = false): string => {\n if (this.commitInformation?.length > 1) {\n // more than one commit\n return onlyNumbers\n ? `${this.commitInformation[0].id} ... ${\n this.commitInformation[this.commitInformation.length - 1].id\n }`\n : `${this.#commitLabel} ${this.commitInformation[0].id} ... ${\n this.commitInformation[this.commitInformation.length - 1].id\n }`;\n } else if (this.commitInformation?.length === 1) {\n // just one commit\n return onlyNumbers\n ? this.commitInformation[0].id\n : `${this.#commitLabel} ${this.commitInformation[0].id}`;\n } else {\n // Probably commits have not been loaded yet (loading state)\n return onlyNumbers\n ? `${this.#componentLocale.loading}`\n : `${this.#commitLabel} ${this.#componentLocale.loading}`;\n }\n };\n\n #renderFormatedDate = (date: Date): string => {\n const dateObject = new Date(date);\n const lang = navigator.languages?.[0] || navigator.language;\n\n return `${dateObject.toLocaleDateString(\n lang\n )} ${dateObject.toLocaleTimeString(lang, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false\n })}`;\n };\n\n #renderObjectStateWithIcon = (\n objectType: ObjectState,\n objectId: string\n ): JSX.Element[] => {\n if (objectType === \"merging\" || objectType === \"reverting\") {\n return (\n <span class=\"merging-spinner-caption\">\n {this.operationType === \"revert\"\n ? this.#componentLocale.states.reverting\n : this.#componentLocale.states.merging}\n </span>\n );\n }\n const classes = `pill pill--${objectType}`;\n if (\n this.revertPillAsButton &&\n (objectType === \"to-merge\" ||\n objectType === \"to-merge-marked\" ||\n objectType === \"to-revert\")\n ) {\n return (\n <button\n class={{ [classes]: true, \"button-secondary\": true }}\n onClick={this.#mergeSingleObject(objectId)}\n >\n {this.#componentLocale.statesForButton[objectType]}\n </button>\n );\n } else {\n return (\n <span class={classes}>{this.#componentLocale.states[objectType]}</span>\n );\n }\n };\n\n #renderObjectsRows = (): JSX.Element[] => {\n return this.objectsFiltered.map(commitObject => {\n const marked = this.markedObjectsSet.has(commitObject.id);\n\n const alreadyMerged = this.alreadyMergedObjectsIdsArray.find(\n checkedObjectId => checkedObjectId === commitObject.id\n );\n const errorOrWarningMessage = this.commitObjectsMessagesMap.get(\n commitObject.id\n );\n const state = this.objectsStatesMap.get(commitObject.id);\n\n let MESSAGE_ICON;\n if (state === \"error\") {\n MESSAGE_ICON = ERROR_ICON;\n } else if (state === \"warning\") {\n MESSAGE_ICON = WARNING_ICON;\n }\n\n return (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n key={commitObject.id}\n rowid={commitObject.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\": alreadyMerged\n }}\n size=\"max-content\"\n >\n {commitObject.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(commitObject.type)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {commitObject.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderActionCellContent(commitObject.actionTaken)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell--for-pill\">\n {this.#renderObjectStateWithIcon(\n this.objectsStatesMap.get(commitObject.id),\n commitObject.id\n )}\n </ch-tabular-grid-cell>\n {errorOrWarningMessage && (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty\n class={{ \"tabular-grid-rowset-empty\": true, [state]: true }}\n >\n <p class=\"warning-error-description\">\n <ch-image\n class=\"icon-md warning-error-icon\"\n src={MESSAGE_ICON}\n ></ch-image>\n {errorOrWarningMessage}\n </p>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid-row>\n );\n });\n };\n\n #rowContextMenuHandler = async (\n ev: CustomEvent<TabularGridRowContextMenuEvent>\n ) => {\n ev.preventDefault();\n const selectedRowsIds = await this.tabularGridEl.getSelectedRows();\n\n await this.contextMenuCallback({\n selection: selectedRowsIds,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\n\n #rowMarkingChangedHandler = (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n const newobjectsMarkedSet = new Set<string>();\n const newobjectsStatesMap = new Map(this.objectsStatesMap);\n const markedRowsIds = event.detail.rowsId;\n const checkedObjectsIgnoringAlreadyMerged = markedRowsIds.filter(\n markedObjectId =>\n !this.alreadyMergedObjectsIdsArray.includes(markedObjectId)\n );\n this.#checkedObjectsIdsArray = [...checkedObjectsIgnoringAlreadyMerged];\n\n // Update markedObjectsSet\n this.#checkedObjectsIdsArray.forEach(checkedObjectId => {\n newobjectsMarkedSet.add(checkedObjectId);\n });\n this.markedObjectsSet = newobjectsMarkedSet;\n\n this.atLeastOneObjectIsChecked = markedRowsIds.length > 0;\n\n newobjectsStatesMap.forEach(objectId => {\n const objectCurrentState = this.objectsStatesMap.get(objectId);\n if (\n objectCurrentState !== \"to-merge\" &&\n objectCurrentState !== \"to-merge-marked\"\n ) {\n return;\n }\n\n const markedRowIndex = markedRowsIds.findIndex(id => id === objectId);\n if (markedRowIndex !== -1) {\n newobjectsStatesMap.set(objectId, \"to-merge-marked\");\n markedRowsIds.splice(markedRowIndex, 1);\n markedRowsIds;\n } else {\n newobjectsStatesMap.set(objectId, \"to-merge\");\n }\n });\n\n this.objectsStatesMap = newobjectsStatesMap;\n };\n\n #searchInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.searchValue = (event.detail as string).toLowerCase();\n this.#updateFilteredObjects();\n };\n\n #stateChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.stateFilterValue = event.detail as ObjectStateForFilter;\n this.#updateFilteredObjects();\n };\n\n #updateFilteredObjects = () => {\n let filteredObjects = [...this.commitObjects];\n\n // filter by state (ch-combo-box-render) ...\n if (this.stateFilterValue !== \"all\") {\n filteredObjects = filteredObjects.filter(object => {\n const objectState = this.objectsStatesMap.get(object.id);\n return objectState === this.stateFilterValue;\n });\n }\n\n // and filter by value (ch-edit) as well\n filteredObjects = filteredObjects.filter(object => {\n const includesName = object.name.toLowerCase().includes(this.searchValue);\n\n const includesType = object.type.name\n .toLowerCase()\n .includes(this.searchValue);\n\n const includesDescription = object.description\n .toLowerCase()\n .includes(this.searchValue);\n\n if (includesName || includesType || includesDescription) {\n return true;\n }\n return false;\n });\n\n this.objectsFiltered = filteredObjects;\n };\n\n /**\n * It allows the host updating an object state, by providing the object id.\n * @param objectId The ID of the object to update.\n * @param newState The new state to set on the object.\n * @param message Optional message explaining the change.\n *\n * @example\n * bringChanges.updateObjectState('obj-24', \"merging\", null);\n * bringChanges.updateObjectState('obj-27', \"error\", \"The server did not respond.\");\n */\n @Method()\n async updateObjectState(\n objectId: string,\n newState: ObjectState,\n message: string\n ) {\n // update object state\n const newobjectsStatesMap = new Map(this.objectsStatesMap);\n newobjectsStatesMap.set(objectId, newState);\n this.objectsStatesMap = newobjectsStatesMap;\n\n // add message if state is \"warning\" or \"error\"\n if (message?.length > 0) {\n this.commitObjectsMessagesMap.set(objectId, message);\n }\n\n if (newState === \"merged\" || newState === \"reverted\") {\n // remove from checked\n this.#checkedObjectsIdsArray = this.#checkedObjectsIdsArray.filter(\n checkedObject => checkedObject !== objectId\n );\n\n // add to \"already merged\". This will hide the checkbox\n this.alreadyMergedObjectsIdsArray.push(objectId);\n\n // unmark checkbox:\n this.tabularGridEl.markRow(objectId, false);\n\n // remove message if any\n this.commitObjectsMessagesMap.delete(objectId);\n }\n }\n\n render() {\n const enableRichRowSelector =\n this.alreadyMergedObjectsIdsArray.length !== this.commitObjects.length;\n\n const disableControls = this.merging || this.loading;\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\"\n >\n <p class=\"detail__title subtitle-semi-bold-xs\">\n {this.operationType === \"revert\"\n ? this.#componentLocale.commitDetail.revertChangesDetail\n : this.#componentLocale.commitDetail.bringChangesDetail}\n </p>\n <p class=\"detail__commit-name subtitle-semi-bold-s\">\n {this.#renderCommitsNumbers()}\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 <a\n class=\"detail__link body-regular-s\"\n href={this.commitDetail.genexusServer}\n target=\"_blank\"\n >\n {this.commitDetail.genexusServer}\n </a>\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\">{this.commitDetail.knowledgeBase}</p>\n </div>\n\n <div\n // current version\n class=\"detail__current-version field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.currentVersion}\n </span>\n <a class=\"body-regular-s\">{this.commitDetail.currentVersion}</a>\n </div>\n {this.operationType === \"merge\" && (\n <div\n // merge from version\n class=\"detail__merge-from-version field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitDetail.mergeFromVersion}\n </span>\n <p class=\"body-regular-s\">\n {this.commitDetail.mergeFromVersion}\n </p>\n </div>\n )}\n </div>\n <div\n // header information\n class=\"header__information\"\n >\n <p class=\"information__title subtitle-semi-bold-xs\">\n {this.#componentLocale.commitInformation.title}\n </p>\n <div\n // header information (col-1)\n class=\"information__col-1\"\n >\n <div\n // IDs\n class=\"field field-block\"\n >\n <span class={DETAIL_LABEL_CLASSES}>\n {this.commitInformation.length === 1\n ? this.#componentLocale.commitInformation.id\n : this.#componentLocale.commitInformation.ids}\n </span>\n <p class=\"body-regular-s\">\n {this.#renderCommitsNumbers(true)}\n </p>\n </div>\n {this.commitInformation.length === 1 ? (\n <div class=\"field field-block\">\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitInformation.date}\n </span>\n <p class=\"body-regular-s\">\n {this.#renderFormatedDate(this.commitInformation[0].date)}\n </p>\n </div>\n ) : (\n [\n <div class=\"field field-block\">\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitInformation.from}\n </span>\n <p class=\"body-regular-s\">\n {this.#renderFormatedDate(\n this.commitInformation[0].date\n )}\n </p>\n </div>,\n <div class=\"field field-block\">\n <span class={DETAIL_LABEL_CLASSES}>\n {this.#componentLocale.commitInformation.to}\n </span>\n <p class=\"body-regular-s\">\n {this.#renderFormatedDate(\n this.commitInformation[\n this.commitInformation.length - 1\n ].date\n )}\n </p>\n </div>\n ]\n )}\n </div>\n\n <div\n // header information (col-2)\n class=\"information__col-2\"\n >\n <div\n // To\n class=\"field field-block\"\n >\n <label class={DETAIL_LABEL_CLASSES} htmlFor=\"commit-comments\">\n {this.commitInformation.length > 1\n ? this.#componentLocale.commitInformation.comments\n : this.#componentLocale.commitInformation.comment}\n </label>\n <div class=\"input-comments-container\">\n <ch-edit\n id=\"commit-comments\"\n class=\"input scrollable input-comments body-regular-s\"\n type=\"text\"\n multiline\n readonly\n value={this.#formatComments()}\n ></ch-edit>\n </div>\n </div>\n </div>\n </div>\n </header>\n <div\n class={{\n \"controls-container\": true,\n \"filter\": !this.hideFilters,\n \"spacing-body-inline\": true\n }}\n >\n {!this.hideFilters && [\n <ch-edit\n class=\"input\"\n disabled={disableControls}\n startImgSrc={SEARCH_ICON}\n placeholder={this.#componentLocale.filter.searchPlaceholder}\n type=\"search\"\n onInput={this.#searchInputHandler}\n ></ch-edit>,\n <ch-combo-box-render\n class=\"combo-box\"\n disabled={disableControls}\n model={this.#comboBoxStatesModel}\n value={this.stateFilterValue}\n onInput={this.#stateChangedHandler}\n placeholder={this.#componentLocale.filter.statePlaceholder}\n ></ch-combo-box-render>\n ]}\n\n <button\n class=\"button-primary button-merge-checked\"\n disabled={!this.atLeastOneObjectIsChecked || disableControls}\n onClick={this.#mergeCheckedClickedHandler}\n >\n {this.operationType === \"revert\"\n ? this.#componentLocale.filter.revertSelected\n : this.#componentLocale.filter.mergeSelected}\n </button>\n </div>\n <div class=\"main spacing-body\">\n {this.commitObjects.length ? (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"objects-tabular-grid\": true,\n \"disabled-custom-selector\": this.merging,\n \"empty-result\": this.objectsFiltered.length === 0\n }}\n keyboardNavigationMode=\"focus\"\n rowSelectionMode=\"multiple\"\n onRowMarkingChanged={this.#rowMarkingChangedHandler}\n onRowContextMenu={this.#rowContextMenuHandler}\n ref={(el: HTMLChTabularGridElement) =>\n (this.tabularGridEl = el as HTMLChTabularGridElement)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"name\"\n columnName={this.#componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={enableRichRowSelector}\n richRowSelectorMode=\"mark\"\n settingable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"type\"\n columnName={this.#componentLocale.objects.type}\n settingable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"description\"\n columnName={this.#componentLocale.objects.description}\n settingable={false}\n size={config.tabularGrid.colSize.description}\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"action\"\n columnName={this.#componentLocale.objects.action}\n settingable={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=\"status\"\n columnName={this.#componentLocale.objects.status}\n settingable={false}\n size=\"100px\"\n />\n </ch-tabular-grid-columnset>\n {this.#renderObjectsRows()}\n\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objectsFiltered.length === 0 && (\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\nexport type OperationType = \"merge\" | \"revert\";\n\nexport type CommitDetail = {\n genexusServer: string;\n knowledgeBase: string;\n currentVersion: string;\n mergeFromVersion: string;\n};\n\nexport type CommitInformation = {\n id: string;\n comment: string;\n date: Date;\n};\n\nexport type CommitObject = {\n id: string;\n date: Date;\n name: string;\n type: ObjectType;\n description: string;\n actionTaken: ObjectActionTaken;\n};\n\nexport type ObjectActionTaken =\n | \"Inserted\"\n | \"Deleted\"\n | \"Modified\"\n | \"Unchanged\"\n | \"Unknown\";\n\nexport type ObjectState =\n | \"to-merge\"\n | \"to-merge-marked\"\n | \"to-revert\"\n | \"merging\"\n | \"pending\"\n | \"warning\"\n | \"error\"\n | \"merged\"\n | \"reverted\"\n | \"reverting\";\n\ntype ObjectStateForFilter =\n | Extract<\n ObjectState,\n \"to-merge\" | \"to-revert\" | \"warning\" | \"error\" | \"merged\" | \"reverted\"\n >\n | \"all\";\n\nexport type MergeObjectsCallback = (objectsIds: string[]) => Promise<void>;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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","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","Set","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","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","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","state","pendingAndIgnoredChanged","pending","ignored","componentWillLoad","Locale","getComponentStrings","allActions","types","typesComboBoxModel","componentDidLoad","reload","render","enableRichRowSelector","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","columnId","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","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}\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 TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\n\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\";\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\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 * 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 * A map that holds the current update objects states (\"inserted\" | \"modified\" | \"modified-with-conflicts\" | \"deleted\" | \"updating\" | \"update\")\n */\n @State() objectsStatusMap: Map<string, StatusInternal> = new Map();\n @Watch(\"objectsStatusMap\")\n objectsStatusMapChanged(newObjectsStatusMap: Map<string, StatusInternal>) {\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.#applyClientFilter();\n this.pendingIdsSet.clear();\n this.pendingAndIgnored.pendingForUpdate.forEach(pending => {\n this.pendingIdsSet.add(pending.id);\n });\n this.ignoredIdsSet.clear();\n this.pendingAndIgnored.ignoredObjects.forEach(ignored => {\n this.ignoredIdsSet.add(ignored.id);\n });\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!: LoadCallback;\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\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 this.#loadData(true);\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.add(objectResult.id);\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.name\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: StatusInternal =\n (pendingObject.status as Status) ?? \"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: StatusInternal =\n (ignoredObject.status as Status) ?? \"ignored\";\n this.objectsStatusMap.set(ignoredObject.id, status);\n });\n };\n\n #loadData = async (forceLoad: boolean = false): Promise<void> => {\n const filters: FiltersData = {\n search: this.searchValue,\n type: this.selectedType,\n kbProperties: this.kbPropertiesChecked,\n action: this.selectedAction\n };\n this.loading = true;\n this.objectsMessagesDataMap.clear();\n\n this.pendingAndIgnored = await this.loadCallback(filters, forceLoad);\n this.#setInitialObjectsStatus();\n\n this.loading = false;\n\n // Is is required to mark/check all objects after loadCallback.\n this.#markPendingObjects();\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 render() {\n const enableRichRowSelector = true;\n const disableControls = this.updating || this.loading;\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=\"name\"\n columnName={this.#componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={enableRichRowSelector}\n richRowSelectorMode=\"mark\"\n settingable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"type\"\n columnName={this.#componentLocale.objects.type}\n settingable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"description\"\n columnName={this.#componentLocale.objects.description}\n settingable={false}\n size={config.tabularGrid.colSize.description}\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"modified-on\"\n columnName={this.#componentLocale.objects.modifiedOn}\n settingable={false}\n size=\"max-content\"\n />\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"action\"\n columnName={this.#componentLocale.objects.action}\n settingable={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=\"status\"\n columnName={this.#componentLocale.objects.status}\n settingable={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 Status = \"pending\" | \"updated\" | \"ignored\";\n\nexport type StatusInternal = Status | \"updating\" | \"ignored\";\n\nexport type Action =\n | \"inserted\"\n | \"modified\"\n | \"modified-with-conflicts\"\n | \"deleted\";\n\ntype ActionForFilter = Action | \"all-actions\";\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 type LoadCallback = (\n filters: FiltersData,\n forceLoad: boolean\n) => Promise<UpdateData>;\n\nexport interface ModifiedObject {\n id: string;\n typeIcon: string;\n action?: Action;\n name: string;\n type: string;\n description?: string;\n modifiedOn?: Date;\n status?: Status;\n}\nexport interface UpdateData {\n pendingForUpdate: ModifiedObject[];\n ignoredObjects: ModifiedObject[];\n}\n\nexport interface FiltersData {\n search: string;\n type: string;\n kbProperties: boolean;\n action: ActionForFilter;\n}\n\nexport interface UpdateFromData {\n serverUrl: string;\n kbName: string;\n versionName: string;\n lastFullUpdate: Date;\n}\n\nexport type UpdateCallback = (\n selection: string[]\n) => Promise<UpdateResultData[]>;\n\nexport interface UpdateResultData {\n id: string;\n result: Status;\n messages: MessageData[];\n}\n\nexport interface MessageData {\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n text: string;\n}\n"],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { g as s, r as e, h as t, H as a, a as o } from "./p-97107ecc.js";
|
|
2
|
-
|
|
3
|
-
import { L as i } from "./p-311eedf3.js";
|
|
4
|
-
|
|
5
|
-
const n = ":host{display:grid;block-size:100%;overflow:auto;display:flex;align-items:center;justify-content:center}.content{display:flex;align-items:center;flex-direction:column;color:var(--mer-color__neutral-gray--100);gap:var(--mer-spacing--md)}.check-icon{block-size:64px;inline-size:64px;border-radius:50%;background-color:var(--color-green-1000);background-image:var(--icon__system_check_bright--enabled);background-repeat:no-repeat;background-position:center center;background-size:32px;margin-block-end:18px}.genexus-next-logo{inline-size:140px;margin-block-start:108px}";
|
|
6
|
-
|
|
7
|
-
const r = s(`./gx-ide-assets/status-message/images/left-side-illustration.svg`);
|
|
8
|
-
|
|
9
|
-
const c = s(`./gx-ide-assets/status-message/images/right-side-illustration.svg`);
|
|
10
|
-
|
|
11
|
-
const g = s(`./gx-ide-assets/status-message/images/genexus-next-logo.svg`);
|
|
12
|
-
|
|
13
|
-
const l = [
|
|
14
|
-
// Use only the bundles that are needed for this component.
|
|
15
|
-
"resets/box-sizing", "utils/typography", "utils/spacing" ];
|
|
16
|
-
|
|
17
|
-
const d = class {
|
|
18
|
-
constructor(s) {
|
|
19
|
-
e(this, s);
|
|
20
|
-
}
|
|
21
|
-
async componentWillLoad() {
|
|
22
|
-
this._componentLocale = await i.getComponentStrings(this.el);
|
|
23
|
-
}
|
|
24
|
-
componentDidLoad() {}
|
|
25
|
-
render() {
|
|
26
|
-
return t(a, {
|
|
27
|
-
class: "widget spacing-body",
|
|
28
|
-
style: {
|
|
29
|
-
backgroundImage: `url('${r}'), url('${c}')`,
|
|
30
|
-
backgroundRepeat: "no-repeat, no-repeat",
|
|
31
|
-
backgroundPosition: "left, right bottom",
|
|
32
|
-
backgroundSize: "auto 100%, auto 55%"
|
|
33
|
-
}
|
|
34
|
-
}, t("ch-theme", {
|
|
35
|
-
model: l
|
|
36
|
-
}), t("div", {
|
|
37
|
-
class: "content"
|
|
38
|
-
}, t("span", {
|
|
39
|
-
class: "check-icon"
|
|
40
|
-
}), t("h1", {
|
|
41
|
-
class: "heading-3"
|
|
42
|
-
}, this._componentLocale.title), t("p", {
|
|
43
|
-
class: "subtitle-regular-s"
|
|
44
|
-
}, this._componentLocale.description), t("img", {
|
|
45
|
-
src: g,
|
|
46
|
-
alt: "",
|
|
47
|
-
class: "genexus-next-logo"
|
|
48
|
-
})));
|
|
49
|
-
}
|
|
50
|
-
static get assetsDirs() {
|
|
51
|
-
return [ "gx-ide-assets/status-message" ];
|
|
52
|
-
}
|
|
53
|
-
get el() {
|
|
54
|
-
return o(this);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
d.style = n;
|
|
59
|
-
|
|
60
|
-
export { d as gx_ide_status_message };
|
|
61
|
-
//# sourceMappingURL=p-50253b96.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["statusMessageCss","LEFT_SIDE_ILLUSTRATION","getAssetPath","RIGHT_SIDE_ILLUSTRATION","GENEXUS_NEXT_LOGO","CSS_BUNDLES","GxIdeStatusMessage","componentWillLoad","this","_componentLocale","Locale","getComponentStrings","el","componentDidLoad","render","h","Host","class","style","backgroundImage","backgroundRepeat","backgroundPosition","backgroundSize","model","title","description","src","alt"],"sources":["src/components/status-message/status-message.scss?tag=gx-ide-status-message&encapsulation=shadow","src/components/status-message/status-message.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.content {\n display: flex;\n align-items: center;\n flex-direction: column;\n color: var(--mer-color__neutral-gray--100);\n gap: var(--mer-spacing--md);\n}\n\n.check-icon {\n $checkIconSize: 64px;\n block-size: $checkIconSize;\n inline-size: $checkIconSize;\n border-radius: 50%;\n background-color: var(--color-green-1000);\n background-image: var(--icon__system_check_bright--enabled);\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 32px;\n margin-block-end: 18px;\n}\n\n.genexus-next-logo {\n inline-size: 140px;\n margin-block-start: 108px;\n}\n","// This is a starting template. Do not edit this file directly.\n// Dupicate it and modify the new file as needed.\n\nimport { Component, Host, Element, getAssetPath, h } from \"@stencil/core\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nconst LEFT_SIDE_ILLUSTRATION = getAssetPath(\n `./gx-ide-assets/status-message/images/left-side-illustration.svg`\n);\nconst RIGHT_SIDE_ILLUSTRATION = getAssetPath(\n `./gx-ide-assets/status-message/images/right-side-illustration.svg`\n);\nconst GENEXUS_NEXT_LOGO = getAssetPath(\n `./gx-ide-assets/status-message/images/genexus-next-logo.svg`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n // Use only the bundles that are needed for this component.\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\n@Component({\n tag: \"gx-ide-status-message\",\n styleUrl: \"status-message.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/status-message\"]\n})\nexport class GxIdeStatusMessage {\n _componentLocale: any;\n\n @Element() el: HTMLGxIdeStatusMessageElement;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidLoad() {}\n\n render() {\n return (\n <Host\n class=\"widget spacing-body\"\n style={{\n backgroundImage: `url('${LEFT_SIDE_ILLUSTRATION}'), url('${RIGHT_SIDE_ILLUSTRATION}')`,\n backgroundRepeat: \"no-repeat, no-repeat\",\n backgroundPosition: \"left, right bottom\",\n backgroundSize: \"auto 100%, auto 55%\"\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"content\">\n <span class=\"check-icon\"></span>\n <h1 class=\"heading-3\">{this._componentLocale.title}</h1>\n <p class=\"subtitle-regular-s\">{this._componentLocale.description}</p>\n <img src={GENEXUS_NEXT_LOGO} alt=\"\" class=\"genexus-next-logo\" />\n </div>\n </Host>\n );\n }\n}\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SaveCallback = () => Promise<string>;\n"],"mappings":";;;;AAAA,MAAMA,IAAmB;;ACSzB,MAAMC,IAAyBC,EAC7B;;AAEF,MAAMC,IAA0BD,EAC9B;;AAEF,MAAME,IAAoBF,EACxB;;AAGF,MAAMG,IAA8B;;AAElC,qBACA,oBACA;;MASWC,IAAkB;;;;EAK7B,uBAAMC;IACJC,KAAKC,yBAAyBC,EAAOC,oBAAoBH,KAAKI;;EAGhE,gBAAAC,IAAgB;EAEhB,MAAAC;IACE,OACEC,EAACC,GAAI;MACHC,OAAM;MACNC,OAAO;QACLC,iBAAiB,QAAQlB,aAAkCE;QAC3DiB,kBAAkB;QAClBC,oBAAoB;QACpBC,gBAAgB;;OAGlBP,EAAA;MAAUQ,OAAOlB;QACjBU,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAME,OAAM;QACZF,EAAA;MAAIE,OAAM;OAAaT,KAAKC,iBAAiBe,QAC7CT,EAAA;MAAGE,OAAM;OAAsBT,KAAKC,iBAAiBgB,cACrDV,EAAA;MAAKW,KAAKtB;MAAmBuB,KAAI;MAAGV,OAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","startImgSrc","icon","hasActiveNode","node","active","Array","isArray","nodes","some","hasActiveVersionInList","versionsList","historyCss","CSS_BUNDLES","FILTER_ICON_PRIMARY","getIconPath","category","colorType","FILTER_ICON","RESET_ICON","SEARCH_ICON","GxIdeTeamDevHistory","_GxIdeTeamDevHistory__componentLocale","set","this","_GxIdeTeamDevHistory_types","_GxIdeTeamDevHistory_fromEl","_GxIdeTeamDevHistory_revisionEl","_GxIdeTeamDevHistory_searchEl","_GxIdeTeamDevHistory_toEl","_GxIdeTeamDevHistory_typesEl","_GxIdeTeamDevHistory_userEl","_GxIdeTeamDevHistory_sidebarEl","_GxIdeTeamDevHistory_revisionsGridEl","_GxIdeTeamDevHistory_getObjectsFromVersion","async","versionId","loading","filters","search","__classPrivateFieldGet","from","Date","to","revision","user","type","objects","loadCallback","_GxIdeTeamDevHistory_getSelectedRevision","call","_a","revisionId","historyDetail","loadDetailCallback","title","_GxIdeTeamDevHistory_formatHistoryDetailDate","selectedRevisionId","_GxIdeTeamDevHistory_registerGridContextMenuListener","addEventListener","ev","preventDefault","stopPropagation","_GxIdeTeamDevHistory_gridContextMenuCallbackHandler","gridContextMenuCallback","selection","clientX","clientY","_GxIdeTeamDevHistory_toggleFiltersHandler","filtersHidden","_GxIdeTeamDevHistory_renderCommitsGrid","tabularGridEmpty","length","h","class","onSelectionChanged","detail","rowsId","ref","el","__classPrivateFieldSet","selectRow","mainGrid","columns","settingable","size","comment","commitDate","obj","rowid","key","formatDate","stateTitle","emptyRevisionsText","isAnimated","_GxIdeTeamDevHistory_renderAffectedObjectsGrid","iterable","affectedObjectsGrid","config","tabularGrid","colSize","maxContent","types","description","auto","action","renderObjectTypeWithIcon","renderObjectStateWithIcon","state","stateIconSrc","emptyHistoryDetailText","_GxIdeTeamDevHistory_renderLoader","loaderTitle","loader","show","parts","split","datePart","formattedDate","selectedVersionIdChanged","newSelectedVersionId","selectedVersionId","versionsListChanged","newVersionsList","versions","hasActiveVersion","isFirstLoad","componentWillLoad","Locale","getComponentStrings","componentDidLoad","e","sidebarExpanded","render","Host","model","expanded","expandButtonCollapseAccessibleName","sidebar","collapseAriaLabel","expandButtonExpandAccessibleName","expandAriaLabel","showExpandButton","checkboxType","itemsList","expandOnClick","selectionChanged","selectedVersionChangeCallback","itemContextMenuCallback","htmlFor","part","searchFilter","filterAriaLabel","onClick","src","reloadAriaLabel","inert","hidden","accessibleName","multiline","autoGrow","readonly"],"sources":["src/components/team-dev/history/helpers.ts","src/components/team-dev/history/history.scss?tag=gx-ide-team-dev-history&encapsulation=shadow","src/components/team-dev/history/history.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType, GxOption } from \"../../../common/types\";\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { ItemNode } from \"../../select-kb-items/select-kb-items\";\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxItemModel[] =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name,\n startImgSrc: objectType.icon\n }));\n\nexport const mapCategoryToComboBoxItemModel = (\n categoryModel: GxOption[]\n): ComboBoxModel =>\n categoryModel.map(category => ({\n value: category.id,\n caption: category.label\n }));\n\nconst hasActiveNode = (node: any): boolean => {\n if (node.active) {\n return true;\n }\n if (Array.isArray(node.nodes)) {\n return node.nodes.some(hasActiveNode);\n }\n return false;\n};\n\nexport const hasActiveVersionInList = (versionsList: ItemNode[]): boolean => {\n return versionsList.some(hasActiveNode);\n};\n","@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n@import \"../common/styles.scss\";\n\n// TODO: this should be a class on Mercury.\n// Not sure if applying \".field-group\" is the right thing to do.\n$commonRowGap: var(--mer-spacing--sm);\n\n:host {\n display: grid;\n grid-template-columns: max-content 1fr;\n block-size: 100%;\n overflow: auto;\n}\n\n.sidebar {\n background-color: transparent !important; // TODO: Apply elevation classes on Mercury.\n border-inline-end: var(--section-common-border);\n}\n\n.sidebar::part(expand-button) {\n border-radius: var(--control__border-radius);\n}\n\ngx-ide-select-kb-items {\n --search-input-max-inline-size: 300px;\n opacity: 0;\n transition: opacity var(--mer-timing--fast);\n}\ngx-ide-select-kb-items.sidebar-expanded {\n opacity: 1;\n}\n\nch-tabular-grid.tabular-grid--empty::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\n\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\n.main {\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-row-gap: $commonRowGap;\n overflow: auto;\n}\n.main__header {\n display: grid;\n}\n.main__content {\n position: relative;\n overflow: auto;\n display: grid;\n grid-template-rows: 1fr max-content 2fr;\n grid-row-gap: $commonRowGap;\n}\n\n.tabular-grid {\n overflow: auto;\n}\n\n/*SECOND GRID*/\n.search-filter {\n display: grid;\n grid-template-columns: 1fr max-content max-content;\n gap: var(--gx-ide-grid-column-gap);\n}\n\n.action-buttons {\n justify-self: flex-end;\n}\n\n.filters-grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-template-areas:\n \"from from to to type type\"\n \"user user user revision revision revision\";\n grid-gap: var(--gx-ide-grid-column-gap);\n padding-block-start: $commonRowGap;\n}\n\n.filters-container {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--mer-timing--fast);\n}\n\n.filters-container-visible {\n grid-template-rows: 1fr;\n}\n\n.filters-container > div {\n overflow: hidden;\n}\n\n.field-from {\n grid-area: from;\n}\n\n.field-to {\n grid-area: to;\n}\n.field-type {\n grid-area: type;\n}\n.field-user {\n grid-area: user;\n}\n.field-revision {\n grid-area: revision;\n}\n\n// commits grid \"comment\" column\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".commits-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-min-inline-size: 200px,\n $tabular-grid-affected-columns-nth-list: (\n 2\n )\n);\n\n// affected objects grid \"description\" column\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".affected-objects-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-min-inline-size: 200px,\n $tabular-grid-affected-columns-nth-list: (\n 5\n )\n);\n","/* STENCIL IMPORTS */\nimport { Component, Element, h, Host, Prop, State, Watch } from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\n/* CUSTOM IMPORTS */\nimport { ComboBoxItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/combo-box/types\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { config } from \"../../../common/config\";\nimport { formatDate } from \"../../../common/helpers\";\nimport { Locale } from \"../../../common/locale\";\nimport { ContextMenuInfo } from \"../../../components\";\nimport { ItemNode } from \"../../select-kb-items/select-kb-items\";\nimport {\n hasActiveVersionInList,\n mapObjectTypeToComboBoxItemModel\n} from \"./helpers\";\nimport {\n renderObjectStateWithIcon,\n renderObjectTypeWithIcon\n} from \"../common/utilities\";\nimport { ObjectState } from \"../version-control/common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/tabular-grid\",\n \"components/accordion\",\n \"components/sidebar\"\n];\n\nconst FILTER_ICON_PRIMARY = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"primary\"\n});\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-surface\"\n});\n\nconst RESET_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"primary\"\n});\n\nconst SEARCH_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-team-dev-history\",\n styleUrl: \"history.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-history\"]\n})\nexport class GxIdeTeamDevHistory {\n #_componentLocale: any;\n\n #types: ComboBoxItemModel[] = [];\n\n @Element() el: HTMLGxIdeTeamDevHistoryElement;\n\n #fromEl?: HTMLChEditElement;\n #revisionEl?: HTMLChEditElement;\n #searchEl: HTMLChEditElement;\n #toEl?: HTMLChEditElement;\n #typesEl?: HTMLChComboBoxRenderElement;\n #userEl?: HTMLChEditElement;\n #sidebarEl: HTMLChSidebarElement;\n #revisionsGridEl: HTMLChTabularGridElement;\n\n @State() historyDetail: RevisionDetailData;\n\n /**\n * The files rendered in the table\n */\n @State() objects: RevisionData[] = [];\n\n /**\n * Used to call getObjectsFromVersion from the versionsChanged method only once after receiving the versions for the first time.\n */\n @State() isFirstLoad: boolean = true;\n\n /**\n * Used to hide the select-kb-items when collapsed\n */\n @State() sidebarExpanded: boolean = true;\n\n /**\n * Used to show or hide the filters section\n */\n @State() filtersHidden = true;\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * The Id of the selected revision in the revisions grid\n */\n @State() selectedRevisionId: string;\n\n /**\n * Used to customize the select-kb-items \"header\" part grid layout\n */\n @State() hasActiveVersion: boolean = false; // TODO:\n\n /**\n * Possible values of type filter\n */\n @Prop() readonly types: ObjectType[];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Callback invoked when user right-clicks on the grid\n */\n @Prop() readonly gridContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * The Id of the selected version in the select-kb-items component\n */\n @Prop({ mutable: true }) selectedVersionId: string;\n @Watch(\"selectedVersionId\")\n async selectedVersionIdChanged(newSelectedVersionId: string) {\n this.selectedVersionId = newSelectedVersionId;\n\n // Reset filters\n this.#searchEl.value = null;\n this.#fromEl.value = null;\n this.#toEl.value = null;\n this.#revisionEl.value = null;\n this.#userEl.value = null;\n this.#typesEl.value = this.#types[0]?.value;\n\n await this.#getObjectsFromVersion(newSelectedVersionId);\n }\n\n /**\n * List of versions to show in the versions tree\n */\n @Prop({ mutable: true }) versions: ItemNode[] = [];\n @Watch(\"versions\")\n async versionsListChanged(newVersionsList: ItemNode[]) {\n this.versions = newVersionsList;\n this.hasActiveVersion = hasActiveVersionInList(newVersionsList);\n\n if (\n newVersionsList.length > 0 &&\n this.selectedVersionId &&\n this.isFirstLoad\n ) {\n await this.#getObjectsFromVersion(this.selectedVersionId);\n this.isFirstLoad = false;\n }\n }\n\n /**\n * Callback invoked when is necessary to reload the history info. Receive the filters as parameters and only returns the info corresponding to the master grid.\n\n */\n @Prop() readonly loadCallback: LoadCallback;\n\n /**\n * Callback invoked to obtain detailed info from a revision. As parameter receive internal revision id\n */\n @Prop() readonly loadDetailCallback: LoadDetailCallback;\n\n /**\n * Callback invoked when the selected version changes. As parameter receive the selected version id\n */\n @Prop() readonly selectedVersionChangeCallback: SelectedVersionChangeCallback;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.#types = mapObjectTypeToComboBoxItemModel(this.types);\n }\n\n async componentDidLoad() {\n this.#sidebarEl.addEventListener(\n \"expandedChange\",\n (e: CustomEvent<boolean>) => {\n this.sidebarExpanded = e.detail;\n }\n );\n }\n\n #getObjectsFromVersion = async (versionId: string): Promise<void> => {\n this.loading = true;\n\n const filters: FiltersData = {\n search: this.#searchEl.value ? this.#searchEl.value : \"\",\n from: this.#fromEl.value ? new Date(this.#fromEl.value) : null,\n to: this.#toEl.value ? new Date(this.#toEl.value) : null,\n revision: this.#revisionEl.value ? this.#revisionEl.value : \"\",\n user: this.#userEl.value ? this.#userEl.value : \"\",\n type: this.#typesEl.value === \"all\" ? \"\" : this.#typesEl.value\n };\n\n this.objects = await this.loadCallback(filters, versionId);\n await this.#getSelectedRevision(this.objects[0]?.id);\n this.loading = false;\n };\n\n #getSelectedRevision = async (revisionId: string) => {\n if (revisionId) {\n this.historyDetail = await this.loadDetailCallback(revisionId);\n this.historyDetail.title = this.#formatHistoryDetailDate(\n this.historyDetail.title\n );\n this.selectedRevisionId = revisionId;\n } else {\n this.historyDetail = null;\n }\n };\n\n #registerGridContextMenuListener = (): void => {\n if (this.#revisionsGridEl) {\n this.#revisionsGridEl.addEventListener(\n \"contextmenu\",\n (ev: MouseEvent): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.#gridContextMenuCallbackHandler(ev);\n }\n );\n }\n };\n\n #gridContextMenuCallbackHandler = async (ev: MouseEvent): Promise<void> => {\n this.gridContextMenuCallback({\n selection: [this.selectedRevisionId],\n clientX: ev.clientX,\n clientY: ev.clientY\n });\n };\n\n #toggleFiltersHandler = () => {\n this.filtersHidden = !this.filtersHidden;\n };\n\n #renderCommitsGrid = (): Element => {\n const tabularGridEmpty = this.objects?.length === 0 || !this.objects;\n return (\n <ch-tabular-grid\n class={{\n \"commits-grid\": true,\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty\n }}\n onSelectionChanged={(ev: any) => {\n this.objects.length > 0 &&\n this.#getSelectedRevision(ev.detail.rowsId[0]);\n }}\n ref={(el: HTMLChTabularGridElement) => {\n if (el && this.#revisionsGridEl !== el) {\n this.#revisionsGridEl = el as HTMLChTabularGridElement;\n\n this.#registerGridContextMenuListener();\n\n if (this.objects.length > 0) {\n this.#revisionsGridEl.selectRow(this.objects[0]?.id, true);\n }\n }\n }}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.id}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.comment}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"1fr\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.user}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#_componentLocale.mainGrid.columns.commitDate}\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"max-content\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n {this.objects.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: RevisionData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n key={obj.id}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.id}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.comment}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.user}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {`${formatDate(obj.commitDate, \"date-time\")}`}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateTitle={this.#_componentLocale.emptyRevisionsText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n\n <ch-tabular-grid-row class=\"tabular-grid-row\"></ch-tabular-grid-row>\n </ch-tabular-grid>\n );\n };\n\n #renderAffectedObjectsGrid = (): Element => {\n const iterable = this.historyDetail ? this.historyDetail.objects : [];\n const tabularGridEmpty =\n this.historyDetail?.objects.length === 0 || !this.historyDetail;\n return (\n <ch-tabular-grid\n class={{\n \"affected-objects-grid\": true,\n \"tabular-grid\": true,\n \"tabular-grid--empty\": tabularGridEmpty\n }}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.name\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.types\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.description\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.auto}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={\n this.#_componentLocale.affectedObjectsGrid.columns.action\n }\n column-name-position=\"text\"\n class=\"tabular-grid-column\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n {this.historyDetail && this.historyDetail.objects.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {iterable.map((obj: ObjectData) => (\n <ch-tabular-grid-row class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(obj.type)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectStateWithIcon(obj.state)}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#_componentLocale.emptyHistoryDetailText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n\n <ch-tabular-grid-row class=\"tabular-grid-row\"></ch-tabular-grid-row>\n </ch-tabular-grid>\n );\n };\n\n #renderLoader = (): Element => {\n return (\n this.loading && (\n <div class=\"main__content scrollable\">\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n show\n description={this.#_componentLocale.loader.description}\n ></gx-ide-loader>\n </div>\n )\n );\n };\n\n #formatHistoryDetailDate = (title: string): string => {\n const parts = title.split(\" - \");\n const datePart = new Date(parts[1]);\n const formattedDate = formatDate(datePart, \"date-time\");\n return `${parts[0]} - ${formattedDate} - ${parts[2]}`;\n };\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <ch-sidebar\n ref={(el: HTMLChSidebarElement) =>\n (this.#sidebarEl = el as HTMLChSidebarElement)\n }\n class=\"sidebar\"\n expanded={this.sidebarExpanded}\n expandButtonCollapseAccessibleName={\n this.#_componentLocale.sidebar.collapseAriaLabel\n }\n expandButtonExpandAccessibleName={\n this.#_componentLocale.sidebar.expandAriaLabel\n }\n showExpandButton\n >\n <gx-ide-select-kb-items\n class={{\n \"sidebar-expanded\": this.sidebarExpanded,\n \"has-active-version\": this.hasActiveVersion\n }}\n checkboxType=\"none\"\n itemsList={this.versions}\n expandOnClick={false}\n selectionChanged={this.selectedVersionChangeCallback}\n itemContextMenuCallback={this.itemContextMenuCallback}\n ></gx-ide-select-kb-items>\n </ch-sidebar>\n\n <main class=\"main spacing-body-block-start spacing-body-inline\">\n <div class=\"main__header\">\n <div class=\"search-filter\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"search\">\n {this.#_componentLocale.filters.search}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n startImgSrc={SEARCH_ICON}\n part=\"search\"\n id=\"search\"\n ref={(el: HTMLChEditElement) =>\n (this.#searchEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <button\n id=\"filter-toggle-button\"\n class=\"button-teritary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.filterAriaLabel}\n aria-expanded={this.filtersHidden ? \"false\" : \"true\"}\n aria-controls=\"filters-container\"\n onClick={() => this.#toggleFiltersHandler()}\n >\n <ch-image class=\"icon-md\" src={FILTER_ICON_PRIMARY}></ch-image>\n </button>\n\n <button\n class=\"button-teritary button-icon-only\"\n aria-label={this.#_componentLocale.searchFilter.reloadAriaLabel}\n onClick={() =>\n this.#getObjectsFromVersion(this.selectedVersionId)\n }\n part={this.#_componentLocale.searchFilter.reloadAriaLabel}\n >\n <ch-image class=\"icon-md\" src={RESET_ICON}></ch-image>\n </button>\n </div>\n\n <div\n id=\"filters-container\"\n aria-labelledby=\"filter-toggle-button\"\n class={{\n \"filters-container-visible\": !this.filtersHidden,\n \"filters-container\": true\n }}\n inert={this.filtersHidden}\n hidden={this.filtersHidden}\n >\n <div>\n <div class=\"filters-grid\">\n <div class=\"field field-block field-from\">\n <label class=\"label\" htmlFor=\"from\">\n {this.#_componentLocale.filters.from}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n type=\"date\"\n part=\"from\"\n id=\"from\"\n ref={(el: HTMLChEditElement) =>\n (this.#fromEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-to\">\n <label class=\"label\" htmlFor=\"to\">\n {this.#_componentLocale.filters.to}\n </label>\n <ch-edit\n value=\"\"\n class=\"input\"\n type=\"date\"\n id=\"to\"\n ref={(el: HTMLChEditElement) =>\n (this.#toEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-type\">\n <label class=\"label\" htmlFor=\"type\">\n {this.#_componentLocale.filters.type}\n </label>\n\n <ch-combo-box-render\n accessibleName=\"types\"\n class=\"combo-box\"\n part=\"type\"\n model={this.#types}\n value={this.#types[0]?.value}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#typesEl = el as HTMLChComboBoxRenderElement)\n }\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block field-user\">\n <label class=\"label\" htmlFor=\"user\">\n {this.#_componentLocale.filters.user}\n </label>\n\n <ch-edit\n value=\"\"\n part=\"user\"\n class=\"input\"\n id=\"user\"\n ref={(el: HTMLChEditElement) =>\n (this.#userEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n\n <div class=\"field field-block field-revision\">\n <label class=\"label\" htmlFor=\"revision\">\n {this.#_componentLocale.filters.revision}\n </label>\n\n <ch-edit\n value=\"\"\n part=\"revision\"\n class=\"input\"\n id=\"revision\"\n ref={(el: HTMLChEditElement) =>\n (this.#revisionEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {this.#renderLoader()}\n\n {!this.loading && (\n <div class=\"main__content scrollable\">\n {this.#renderCommitsGrid()}\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"comment-area\">\n {this.historyDetail ? this.historyDetail.title : null}\n </label>\n <ch-edit\n class=\"input comment-text-area\"\n value={this.historyDetail ? this.historyDetail.comment : null}\n multiline\n autoGrow\n readonly={true}\n part=\"comment-area\"\n id=\"comment-area\"\n ></ch-edit>\n </div>\n\n {this.#renderAffectedObjectsGrid()}\n </div>\n )}\n </main>\n </Host>\n );\n }\n}\n\n// Types\nexport type ObjectType = {\n id: string;\n name: string;\n icon?: string;\n};\n\nexport type FiltersData = {\n search: string;\n from?: Date;\n to?: Date;\n user?: string;\n revision?: string;\n type?: string;\n};\nexport type RevisionData = {\n id: string;\n comment: string;\n user: string;\n commitDate: Date;\n};\n\nexport type RevisionDetailData = {\n title: string;\n comment: string;\n objects: ObjectData[];\n};\nexport type ObjectData = {\n typeIcon: string;\n state: ObjectState;\n name: string;\n type: ObjectType;\n description: string;\n action: string;\n};\n\nexport type LoadCallback = (\n filters: FiltersData,\n versionId: string\n) => Promise<RevisionData[]>;\n\nexport type LoadDetailCallback = (\n revision: string\n) => Promise<RevisionDetailData>;\n\nexport type SelectedVersionChangeCallback = (\n selectedVersion: string[]\n) => Promise<void>;\n"],"mappings":";;;;;;;;;;;;AAKO,MAAMA,mCACXC,KAEAA,EAAgBC,KAAIC,MAAU;EAC5BC,OAAOD,EAAWE;EAClBC,SAASH,EAAWI;EACpBC,aAAaL,EAAWM;;;AAW5B,MAAMC,gBAAiBC;EACrB,IAAIA,EAAKC,QAAQ;IACf,OAAO;;EAET,IAAIC,MAAMC,QAAQH,EAAKI,QAAQ;IAC7B,OAAOJ,EAAKI,MAAMC,KAAKN;;EAEzB,OAAO;AAAK;;AAGP,MAAMO,yBAA0BC,KAC9BA,EAAaF,KAAKN;;ACjC3B,MAAMS,IAAa;;;;;;;;;;;;;;;;;ACqBnB,MAAMC,IAA8B,EAClC,qBACA,oBACA,gBACA,iBACA,oBACA,uBACA,2BACA,wBACA;;AAGF,MAAMC,IAAsBC,EAAY;EACtCC,UAAU;EACVhB,MAAM;EACNiB,WAAW;;;AAGb,MAAMC,IAAcH,EAAY;EAC9BC,UAAU;EACVhB,MAAM;EACNiB,WAAW;;;AAGb,MAAME,IAAaJ,EAAY;EAC7BC,UAAU;EACVhB,MAAM;EACNiB,WAAW;;;AAGb,MAAMG,IAAcL,EAAY;EAC9BC,UAAU;EACVhB,MAAM;EACNiB,WAAW;;;MASAI,IAAmB;;;IAC9BC,EAAAC,IAAAC,WAAA;IAEAC,EAAAF,IAAAC,MAA8B;IAI9BE,EAAAH,IAAAC,WAAA;IACAG,EAAAJ,IAAAC,WAAA;IACAI,EAAAL,IAAAC,WAAA;IACAK,EAAAN,IAAAC,WAAA;IACAM,EAAAP,IAAAC,WAAA;IACAO,EAAAR,IAAAC,WAAA;IACAQ,EAAAT,IAAAC,WAAA;IACAS,EAAAV,IAAAC,WAAA;IA8HAU,EAAAX,IAAAC,OAAyBW,MAAOC;;MAC9BZ,KAAKa,UAAU;MAEf,MAAMC,IAAuB;QAC3BC,QAAQC,EAAAhB,MAAII,GAAA,KAAW/B,QAAQ2C,EAAAhB,MAAII,GAAA,KAAW/B,QAAQ;QACtD4C,MAAMD,EAAAhB,MAAIE,GAAA,KAAS7B,QAAQ,IAAI6C,KAAKF,EAAAhB,MAAIE,GAAA,KAAS7B,SAAS;QAC1D8C,IAAIH,EAAAhB,MAAIK,GAAA,KAAOhC,QAAQ,IAAI6C,KAAKF,EAAAhB,MAAIK,GAAA,KAAOhC,SAAS;QACpD+C,UAAUJ,EAAAhB,MAAIG,GAAA,KAAa9B,QAAQ2C,EAAAhB,MAAIG,GAAA,KAAa9B,QAAQ;QAC5DgD,MAAML,EAAAhB,MAAIO,GAAA,KAASlC,QAAQ2C,EAAAhB,MAAIO,GAAA,KAASlC,QAAQ;QAChDiD,MAAMN,EAAAhB,MAAIM,GAAA,KAAUjC,UAAU,QAAQ,KAAK2C,EAAAhB,MAAIM,GAAA,KAAUjC;;MAG3D2B,KAAKuB,gBAAgBvB,KAAKwB,aAAaV,GAASF;YAC1CI,EAAAhB,MAAIyB,GAAA,KAAqBC,KAAzB1B,OAA0B2B,IAAA3B,KAAKuB,QAAQ,QAAE,QAAAI,WAAA,aAAAA,EAAErD;MACjD0B,KAAKa,UAAU;AAAK;IAGtBY,EAAA1B,IAAAC,OAAuBW,MAAOiB;MAC5B,IAAIA,GAAY;QACd5B,KAAK6B,sBAAsB7B,KAAK8B,mBAAmBF;QACnD5B,KAAK6B,cAAcE,QAAQf,EAAAhB,MAAIgC,GAAA,KAAyBN,KAA7B1B,MACzBA,KAAK6B,cAAcE;QAErB/B,KAAKiC,qBAAqBL;aACrB;QACL5B,KAAK6B,gBAAgB;;;IAIzBK,EAAAnC,IAAAC,OAAmC;MACjC,IAAIgB,EAAAhB,MAAIS,GAAA,MAAmB;QACzBO,EAAAhB,MAAIS,GAAA,KAAkB0B,iBACpB,gBACCC;UACCA,EAAGC;UACHD,EAAGE;UACHtB,EAAAhB,MAAIuC,GAAA,KAAgCb,KAApC1B,MAAqCoC;AAAG;;;IAMhDG,EAAAxC,IAAAC,OAAkCW,MAAOyB;MACvCpC,KAAKwC,wBAAwB;QAC3BC,WAAW,EAACzC,KAAKiC;QACjBS,SAASN,EAAGM;QACZC,SAASP,EAAGO;;AACZ;IAGJC,EAAA7C,IAAAC,OAAwB;MACtBA,KAAK6C,iBAAiB7C,KAAK6C;AAAa;IAG1CC,EAAA/C,IAAAC,OAAqB;;MACnB,MAAM+C,MAAmBpB,IAAA3B,KAAKuB,aAAO,QAAAI,WAAA,aAAAA,EAAEqB,YAAW,MAAMhD,KAAKuB;MAC7D,OACE0B,EAAA;QACEC,OAAO;UACL,gBAAgB;UAChB,gBAAgB;UAChB,uBAAuBH;;QAEzBI,oBAAqBf;UACnBpC,KAAKuB,QAAQyB,SAAS,KACpBhC,EAAAhB,MAAIyB,GAAA,KAAqBC,KAAzB1B,MAA0BoC,EAAGgB,OAAOC,OAAO;AAAG;QAElDC,KAAMC;;UACJ,IAAIA,KAAMvC,EAAAhB,MAAIS,GAAA,SAAsB8C,GAAI;YACtCC,EAAAxD,MAAIS,GAAoB8C,GAA8B;YAEtDvC,EAAAhB,MAAIkC,GAAA,KAAiCR,KAArC1B;YAEA,IAAIA,KAAKuB,QAAQyB,SAAS,GAAG;cAC3BhC,EAAAhB,MAAIS,GAAA,KAAkBgD,WAAU9B,IAAA3B,KAAKuB,QAAQ,QAAE,QAAAI,WAAA,aAAAA,EAAErD,IAAI;;;;SAK3D2E,EAAA;QAA2BC,OAAM;SAC/BD,EAAA;QAAA,eACejC,EAAAhB,MAAIF,GAAA,KAAmB4D,SAASC,QAAQrF;QAAE,wBAClC;QACrB4E,OAAM;QACNU,aAAa;QACbC,MAAK;UAEPZ,EAAA;QAAA,eACejC,EAAAhB,MAAIF,GAAA,KAAmB4D,SAASC,QAAQG;QAAO,wBACvC;QACrBZ,OAAM;QACNU,aAAa;QACbC,MAAK;UAEPZ,EAAA;QAAA,eACejC,EAAAhB,MAAIF,GAAA,KAAmB4D,SAASC,QAAQtC;QAAI,wBACpC;QACrB6B,OAAM;QACNU,aAAa;QACbC,MAAK;UAEPZ,EAAA;QAAA,eACejC,EAAAhB,MAAIF,GAAA,KAAmB4D,SAASC,QAAQI;QAAU,wBAC1C;QACrBb,OAAM;QACNU,aAAa;QACbC,MAAK;WAGR7D,KAAKuB,QAAQyB,SAAS,IACrBC,EAAA;QAAwBC,OAAM;SAC3BlD,KAAKuB,QAAQpD,KAAK6F,KACjBf,EAAA;QACEgB,OAAOD,EAAI1F;QACX4F,KAAKF,EAAI1F;QACT4E,OAAM;SAEND,EAAA;QAAsBC,OAAM;SACzBc,EAAI1F,KAEP2E,EAAA;QAAsBC,OAAM;SACzBc,EAAIF,UAEPb,EAAA;QAAsBC,OAAM;SACzBc,EAAI3C,OAEP4B,EAAA;QAAsBC,OAAM;SACzB,GAAGiB,EAAWH,EAAID,YAAY,sBAMvCd,EAAA;QAAwBC,OAAM;SAC5BD,EAAA,sCACEA,EAAA;QACEmB,YAAYpD,EAAAhB,MAAIF,GAAA,KAAmBuE;QACnCC,YAAY;YAMpBrB,EAAA;QAAqBC,OAAM;;AACX;IAItBqB,EAAAxE,IAAAC,OAA6B;;MAC3B,MAAMwE,IAAWxE,KAAK6B,gBAAgB7B,KAAK6B,cAAcN,UAAU;MACnE,MAAMwB,MACJpB,IAAA3B,KAAK6B,mBAAa,QAAAF,WAAA,aAAAA,EAAEJ,QAAQyB,YAAW,MAAMhD,KAAK6B;MACpD,OACEoB,EAAA;QACEC,OAAO;UACL,yBAAyB;UACzB,gBAAgB;UAChB,uBAAuBH;;SAGzBE,EAAA;QAA2BC,OAAM;SAC/BD,EAAA;QAAA,eAEIjC,EAAAhB,MAAIF,GAAA,KAAmB2E,oBAAoBd,QAAQnF;QAAI,wBAEpC;QACrB0E,OAAM;QACNU,aAAa;QACbC,MAAMa,EAAOC,YAAYC,QAAQC;UAEnC5B,EAAA;QAAA,eAEIjC,EAAAhB,MAAIF,GAAA,KAAmB2E,oBAAoBd,QAAQmB;QAAK,wBAErC;QACrB5B,OAAM;QACNU,aAAa;QACbC,MAAMa,EAAOC,YAAYC,QAAQC;UAEnC5B,EAAA;QAAA,eAEIjC,EAAAhB,MAAIF,GAAA,KAAmB2E,oBAAoBd,QAAQoB;QAAW,wBAE3C;QACrB7B,OAAM;QACNU,aAAa;QACbC,MAAMa,EAAOC,YAAYC,QAAQI;UAEnC/B,EAAA;QAAA,eAEIjC,EAAAhB,MAAIF,GAAA,KAAmB2E,oBAAoBd,QAAQsB;QAAM,wBAEtC;QACrB/B,OAAM;QACNU,aAAa;QACbC,MAAMa,EAAOC,YAAYC,QAAQC;WAGpC7E,KAAK6B,iBAAiB7B,KAAK6B,cAAcN,QAAQyB,SAAS,IACzDC,EAAA;QAAwBC,OAAM;SAC3BsB,EAASrG,KAAK6F,KACbf,EAAA;QAAqBC,OAAM;SACzBD,EAAA;QAAsBC,OAAM;SACzBc,EAAIxF,OAEPyE,EAAA;QAAsBC,OAAM;SACzBgC,EAAyBlB,EAAI1C,QAEhC2B,EAAA;QAAsBC,OAAM;SACzBc,EAAIe,cAEP9B,EAAA;QAAsBC,OAAM;SACzBiC,EAA0BnB,EAAIoB,cAMvCnC,EAAA;QAAwBC,OAAM;SAC5BD,EAAA,sCACEA,EAAA;QACEoC,cAAc3F;QACd0E,YAAYpD,EAAAhB,MAAIF,GAAA,KAAmBwF;QACnChB,YAAY;YAMpBrB,EAAA;QAAqBC,OAAM;;AACX;IAItBqC,EAAAxF,IAAAC,OAAgB,MAEZA,KAAKa,WACHoC,EAAA;MAAKC,OAAM;OACTD,EAAA;MACEuC,aAAaxE,EAAAhB,MAAIF,GAAA,KAAmB2F,OAAO1D;MAC3C2D,MAAI;MACJX,aAAa/D,EAAAhB,MAAIF,GAAA,KAAmB2F,OAAOV;;IAOrD/C,EAAAjC,IAAAC,OAA4B+B;MAC1B,MAAM4D,IAAQ5D,EAAM6D,MAAM;MAC1B,MAAMC,IAAW,IAAI3E,KAAKyE,EAAM;MAChC,MAAMG,IAAgB3B,EAAW0B,GAAU;MAC3C,OAAO,GAAGF,EAAM,QAAQG,OAAmBH,EAAM;AAAI;;mBAnXpB;uBAKH;2BAKI;yBAKX;mBAKG;;4BAUS;;;;;oBA2CW;;;;;EAjBhD,8BAAMI,CAAyBC;;IAC7BhG,KAAKiG,oBAAoBD;;QAGzBhF,EAAAhB,MAAII,GAAA,KAAW/B,QAAQ;IACvB2C,EAAAhB,MAAIE,GAAA,KAAS7B,QAAQ;IACrB2C,EAAAhB,MAAIK,GAAA,KAAOhC,QAAQ;IACnB2C,EAAAhB,MAAIG,GAAA,KAAa9B,QAAQ;IACzB2C,EAAAhB,MAAIO,GAAA,KAASlC,QAAQ;IACrB2C,EAAAhB,MAAIM,GAAA,KAAUjC,SAAQsD,IAAAX,EAAAhB,MAAIC,GAAA,KAAQ,QAAE,QAAA0B,WAAA,aAAAA,EAAEtD;UAEhC2C,EAAAhB,MAAIU,GAAA,KAAuBgB,KAA3B1B,MAA4BgG;;EAQpC,yBAAME,CAAoBC;IACxBnG,KAAKoG,WAAWD;IAChBnG,KAAKqG,mBAAmBnH,uBAAuBiH;IAE/C,IACEA,EAAgBnD,SAAS,KACzBhD,KAAKiG,qBACLjG,KAAKsG,aACL;YACMtF,EAAAhB,MAAIU,GAAA,KAAuBgB,KAA3B1B,MAA4BA,KAAKiG;MACvCjG,KAAKsG,cAAc;;;EAoBvB,uBAAMC;IACJ/C,EAAAxD,MAAIF,SAA2B0G,EAAOC,oBAAoBzG,KAAKuD,KAAG;IAClEC,EAAAxD,MAAIC,GAAUhC,iCAAiC+B,KAAK8E,QAAM;;EAG5D,sBAAM4B;IACJ1F,EAAAhB,MAAIQ,GAAA,KAAY2B,iBACd,mBACCwE;MACC3G,KAAK4G,kBAAkBD,EAAEvD;AAAM;;EAoQrC,MAAAyD;;IACE,OACE5D,EAAC6D,GAAI;MAAC5D,OAAM;OACVD,EAAA;MAAU8D,OAAO1H;QAEjB4D,EAAA;MACEK,KAAMC,KACHC,EAAAxD,MAAIQ,GAAc+C,GAA0B;MAE/CL,OAAM;MACN8D,UAAUhH,KAAK4G;MACfK,oCACEjG,EAAAhB,MAAIF,GAAA,KAAmBoH,QAAQC;MAEjCC,kCACEpG,EAAAhB,MAAIF,GAAA,KAAmBoH,QAAQG;MAEjCC,kBAAgB;OAEhBrE,EAAA;MACEC,OAAO;QACL,oBAAoBlD,KAAK4G;QACzB,sBAAsB5G,KAAKqG;;MAE7BkB,cAAa;MACbC,WAAWxH,KAAKoG;MAChBqB,eAAe;MACfC,kBAAkB1H,KAAK2H;MACvBC,yBAAyB5H,KAAK4H;SAIlC3E,EAAA;MAAMC,OAAM;OACVD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7G,EAAAhB,MAAIF,GAAA,KAAmBgB,QAAQC,SAElCkC,EAAA;MACE5E,OAAM;MACN6E,OAAM;MACNzE,aAAamB;MACbkI,MAAK;MACLxJ,IAAG;MACHgF,KAAMC,KACHC,EAAAxD,MAAII,GAAamD,GAAuB;SAK/CN,EAAA;MACE3E,IAAG;MACH4E,OAAM;MAAkC,cAC5BlC,EAAAhB,MAAIF,GAAA,KAAmBiI,aAAaC;MAAe,iBAChDhI,KAAK6C,gBAAgB,UAAU;MAAM,iBACtC;MACdoF,SAAS,MAAMjH,EAAAhB,MAAI4C,GAAA,KAAsBlB,KAA1B1B;OAEfiD,EAAA;MAAUC,OAAM;MAAUgF,KAAK5I;SAGjC2D,EAAA;MACEC,OAAM;MAAkC,cAC5BlC,EAAAhB,MAAIF,GAAA,KAAmBiI,aAAaI;MAChDF,SAAS,MACPjH,EAAAhB,MAAIU,GAAA,KAAuBgB,KAA3B1B,MAA4BA,KAAKiG;MAEnC6B,MAAM9G,EAAAhB,MAAIF,GAAA,KAAmBiI,aAAaI;OAE1ClF,EAAA;MAAUC,OAAM;MAAUgF,KAAKvI;UAInCsD,EAAA;MACE3E,IAAG;MAAmB,mBACN;MAChB4E,OAAO;QACL,8BAA8BlD,KAAK6C;QACnC,qBAAqB;;MAEvBuF,OAAOpI,KAAK6C;MACZwF,QAAQrI,KAAK6C;OAEbI,EAAA,aACEA,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7G,EAAAhB,MAAIF,GAAA,KAAmBgB,QAAQG,OAElCgC,EAAA;MACE5E,OAAM;MACN6E,OAAM;MACN5B,MAAK;MACLwG,MAAK;MACLxJ,IAAG;MACHgF,KAAMC,KACHC,EAAAxD,MAAIE,GAAWqD,GAAuB;SAK7CN,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7G,EAAAhB,MAAIF,GAAA,KAAmBgB,QAAQK,KAElC8B,EAAA;MACE5E,OAAM;MACN6E,OAAM;MACN5B,MAAK;MACLhD,IAAG;MACHgF,KAAMC,KACHC,EAAAxD,MAAIK,GAASkD,GAAuB;SAK3CN,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7G,EAAAhB,MAAIF,GAAA,KAAmBgB,QAAQQ,OAGlC2B,EAAA;MACEqF,gBAAe;MACfpF,OAAM;MACN4E,MAAK;MACLf,OAAO/F,EAAAhB,MAAIC,GAAA;MACX5B,QAAOsD,IAAAX,EAAAhB,MAAIC,GAAA,KAAQ,QAAE,QAAA0B,WAAA,aAAAA,EAAEtD;MACvBiF,KAAMC,KACHC,EAAAxD,MAAIM,GAAYiD,GAAiC;SAKxDN,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7G,EAAAhB,MAAIF,GAAA,KAAmBgB,QAAQO,OAGlC4B,EAAA;MACE5E,OAAM;MACNyJ,MAAK;MACL5E,OAAM;MACN5E,IAAG;MACHgF,KAAMC,KACHC,EAAAxD,MAAIO,GAAWgD,GAAuB;SAK7CN,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7G,EAAAhB,MAAIF,GAAA,KAAmBgB,QAAQM,WAGlC6B,EAAA;MACE5E,OAAM;MACNyJ,MAAK;MACL5E,OAAM;MACN5E,IAAG;MACHgF,KAAMC,KACHC,EAAAxD,MAAIG,GAAeoD,GAAuB;aASxDvC,EAAAhB,MAAIuF,GAAA,KAAc7D,KAAlB1B,QAECA,KAAKa,WACLoC,EAAA;MAAKC,OAAM;OACRlC,EAAAhB,MAAI8C,GAAA,KAAmBpB,KAAvB1B,OAEDiD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAOC,OAAM;MAAQ2E,SAAQ;OAC1B7H,KAAK6B,gBAAgB7B,KAAK6B,cAAcE,QAAQ,OAEnDkB,EAAA;MACEC,OAAM;MACN7E,OAAO2B,KAAK6B,gBAAgB7B,KAAK6B,cAAciC,UAAU;MACzDyE,WAAS;MACTC,UAAQ;MACRC,UAAU;MACVX,MAAK;MACLxJ,IAAG;SAIN0C,EAAAhB,MAAIuE,GAAA,KAA2B7C,KAA/B1B"}
|