@genexus/genexus-ide-ui 1.1.40 → 1.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-server-selector.cjs.entry.js +12 -28
  3. package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +20 -4
  5. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +99 -238
  7. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +60 -10
  9. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +1 -9
  11. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/cjs/tabular-grid-column-sort-5ca06dc1.js +43 -0
  14. package/dist/cjs/tabular-grid-column-sort-5ca06dc1.js.map +1 -0
  15. package/dist/cjs/tabular-grid-render-4350dbaf.js +223 -0
  16. package/dist/cjs/tabular-grid-render-4350dbaf.js.map +1 -0
  17. package/dist/cjs/uncheck-ignored-77ca69fe.js +43 -0
  18. package/dist/cjs/uncheck-ignored-77ca69fe.js.map +1 -0
  19. package/dist/collection/common/chameleon/tabular-grid-column-sort.js +39 -0
  20. package/dist/collection/common/chameleon/tabular-grid-column-sort.js.map +1 -0
  21. package/dist/collection/components/team-dev/bring-changes/bring-changes.js +18 -4
  22. package/dist/collection/components/team-dev/bring-changes/bring-changes.js.map +1 -1
  23. package/dist/collection/components/team-dev/server-selector/server-selector.css +18 -14
  24. package/dist/collection/components/team-dev/server-selector/server-selector.js +11 -27
  25. package/dist/collection/components/team-dev/server-selector/server-selector.js.map +1 -1
  26. package/dist/collection/components/team-dev/update/update.css +1 -0
  27. package/dist/collection/components/team-dev/update/update.js +62 -9
  28. package/dist/collection/components/team-dev/update/update.js.map +1 -1
  29. package/dist/collection/components/team-dev/version-control/commit/commit.css +1 -0
  30. package/dist/collection/components/team-dev/version-control/commit/commit.js +79 -20
  31. package/dist/collection/components/team-dev/version-control/commit/commit.js.map +1 -1
  32. package/dist/collection/components/team-dev/version-control/common/are-sets-equal.js +21 -0
  33. package/dist/collection/components/team-dev/version-control/common/are-sets-equal.js.map +1 -0
  34. package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js +13 -3
  35. package/dist/collection/components/team-dev/version-control/common/tabular-grid-render.js.map +1 -1
  36. package/dist/collection/components/team-dev/version-control/common/uncheck-ignored.js +18 -0
  37. package/dist/collection/components/team-dev/version-control/common/uncheck-ignored.js.map +1 -0
  38. package/dist/collection/components/ww-files/ww-files.js +1 -9
  39. package/dist/collection/components/ww-files/ww-files.js.map +1 -1
  40. package/dist/components/gx-ide-server-selector.js +12 -28
  41. package/dist/components/gx-ide-server-selector.js.map +1 -1
  42. package/dist/components/gx-ide-team-dev-bring-changes.js +18 -4
  43. package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
  44. package/dist/components/gx-ide-team-dev-commit.js +78 -221
  45. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  46. package/dist/components/gx-ide-team-dev-update.js +61 -10
  47. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  48. package/dist/components/gx-ide-ww-files.js +1 -9
  49. package/dist/components/gx-ide-ww-files.js.map +1 -1
  50. package/dist/components/tabular-grid-column-sort.js +41 -0
  51. package/dist/components/tabular-grid-column-sort.js.map +1 -0
  52. package/dist/components/tabular-grid-render.js +216 -0
  53. package/dist/components/tabular-grid-render.js.map +1 -0
  54. package/dist/components/uncheck-ignored.js +40 -0
  55. package/dist/components/uncheck-ignored.js.map +1 -0
  56. package/dist/esm/genexus-ide-ui.js +1 -1
  57. package/dist/esm/gx-ide-server-selector.entry.js +12 -28
  58. package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
  59. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +20 -4
  60. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
  61. package/dist/esm/gx-ide-team-dev-commit.entry.js +81 -220
  62. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  63. package/dist/esm/gx-ide-team-dev-update.entry.js +60 -10
  64. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  65. package/dist/esm/gx-ide-ww-files.entry.js +1 -9
  66. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  67. package/dist/esm/loader.js +1 -1
  68. package/dist/esm/tabular-grid-column-sort-1d503b27.js +41 -0
  69. package/dist/esm/tabular-grid-column-sort-1d503b27.js.map +1 -0
  70. package/dist/esm/tabular-grid-render-f7eb612b.js +216 -0
  71. package/dist/esm/tabular-grid-render-f7eb612b.js.map +1 -0
  72. package/dist/esm/uncheck-ignored-4ba48c9e.js +40 -0
  73. package/dist/esm/uncheck-ignored-4ba48c9e.js.map +1 -0
  74. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  75. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  76. package/dist/genexus-ide-ui/p-02fb496a.js +36 -0
  77. package/dist/genexus-ide-ui/p-02fb496a.js.map +1 -0
  78. package/dist/genexus-ide-ui/{p-970e89ac.entry.js → p-4b06b578.entry.js} +100 -115
  79. package/dist/genexus-ide-ui/p-4b06b578.entry.js.map +1 -0
  80. package/dist/genexus-ide-ui/{p-34447b77.entry.js → p-4e3ad78d.entry.js} +261 -234
  81. package/dist/genexus-ide-ui/p-4e3ad78d.entry.js.map +1 -0
  82. package/dist/genexus-ide-ui/p-77c2e69d.js +314 -0
  83. package/dist/genexus-ide-ui/p-77c2e69d.js.map +1 -0
  84. package/dist/genexus-ide-ui/{p-9b8a8487.entry.js → p-8c867f9a.entry.js} +159 -167
  85. package/dist/genexus-ide-ui/p-8c867f9a.entry.js.map +1 -0
  86. package/dist/genexus-ide-ui/p-a7883e6b.entry.js +691 -0
  87. package/dist/genexus-ide-ui/p-a7883e6b.entry.js.map +1 -0
  88. package/dist/genexus-ide-ui/p-c9b9e260.js +36 -0
  89. package/dist/genexus-ide-ui/p-c9b9e260.js.map +1 -0
  90. package/dist/genexus-ide-ui/{p-42f37527.entry.js → p-e1a2550e.entry.js} +351 -289
  91. package/dist/genexus-ide-ui/p-e1a2550e.entry.js.map +1 -0
  92. package/dist/types/common/chameleon/tabular-grid-column-sort.d.ts +4 -0
  93. package/dist/types/components/team-dev/update/update.d.ts +6 -0
  94. package/dist/types/components/team-dev/version-control/commit/commit.d.ts +15 -13
  95. package/dist/types/components/team-dev/version-control/common/are-sets-equal.d.ts +12 -0
  96. package/dist/types/components/team-dev/version-control/common/tabular-grid-render.d.ts +13 -1
  97. package/dist/types/components/team-dev/version-control/common/uncheck-ignored.d.ts +13 -0
  98. package/dist/types/components/ww-files/ww-files.d.ts +0 -1
  99. package/package.json +1 -1
  100. package/dist/genexus-ide-ui/p-34447b77.entry.js.map +0 -1
  101. package/dist/genexus-ide-ui/p-42f37527.entry.js.map +0 -1
  102. package/dist/genexus-ide-ui/p-723d25ae.entry.js +0 -912
  103. package/dist/genexus-ide-ui/p-723d25ae.entry.js.map +0 -1
  104. package/dist/genexus-ide-ui/p-970e89ac.entry.js.map +0 -1
  105. package/dist/genexus-ide-ui/p-9b8a8487.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["clearGridSelection","gridSource","selectedRowsIds","pendingIdsSet","ignoredIdsSet","gridReference","filteredSelectedRowsIds","length","forEach","async","selectedRowId","has","selectRow","push","headerDetail","type","caption","description","callback","cssClass","h","class","onClick","headerTitle","changesetToComboBoxModel","changesetModel","map","changeset","value","id","name","label","foldersToComboBoxModel","foldersModel","folder","typesToComboBoxItemModel","objectTypeModel","objectType","startImgSrc","icon","ALL_VALUE","CSS_SELECTORS","HEADER","HEADER_DETAILS","FILTER","MAIN","GRID_CELL_DESCRIPTION","ICONS","add","getIconPath","category","colorType","edit","error","filter","filterWithConditions","info","refresh","search","success","substract","warning","BUTTON_ACTION_SELECTOR","renderStateCellContent","action","componentLocale","iconColor","states","deleted","inserted","modified","conflicted","src","style","backgroundColor","renderObjectStatus","objectId","objectsStatusMap","updatePillAsButton","commitSingleObject","status","get","commit","classes","pill","renderTabularGridRows","pendingObjectsAfterFilter","ignoredObjectsAfterFilter","alreadyUpdatedObjectsIdsSet","markedObjectsSet","objectsMessagesDataMap","searchValue","objects","toLowerCase","filteredRows","object","alreadyUpdated","hideCheckbox","marked","messages","key","rowid","ref","el","setAttribute","size","hiChar","renderObjectTypeWithIcon","CLASSES","formatDate","modifiedOn","module","state","lastSynchronized","message","MESSAGE_ICON","text","renderTabularGridColumns","ignoredGridColumns","gridIsEmpty","colSize","config","tabularGrid","auto","maxContent","includes","columnId","columnName","columnType","richRowSelector","richRowSelectorMode","settingable","localState","commitCss","FILTER_SECONDARY_CONTAINER_ID","FILTER_SECONDARY_BUTTON_ID","CSS_BUNDLES","GxIdeTeamDevCommit","_GxIdeTeamDevCommit_componentLocale","set","this","_GxIdeTeamDevCommit_localStatesComboBoxModel","_GxIdeTeamDevCommit_rowCheckedChangedByTheUser","_GxIdeTeamDevCommit_chGridPendingForUpdateEl","_GxIdeTeamDevCommit_commitCheckedClickedHandler","__classPrivateFieldGet","_GxIdeTeamDevCommit_commitObjectsHandler","call","_GxIdeTeamDevCommit_commitSingleObject","newobjectsStatusMap","Map","selection","commentsValue","commentInputHasError","commiting","itemToUpdate","commitResult","commitCallback","objectResult","delete","result","alreadyCommitedObjectsIdsSet","markRow","_GxIdeTeamDevCommit_rowMarkingChangedHandler","event","markedRowsIds","detail","rowsId","Set","markedObjectId","_GxIdeTeamDevCommit_updatePendingCheckedItems","_GxIdeTeamDevCommit_rowSelectionChangedHandler","firstSelectedRowId","selectCallback","_GxIdeTeamDevCommit_commentsInputHandler","_GxIdeTeamDevCommit_applyClientFilter","_GxIdeTeamDevCommit_filteredObjects","pendingAndIgnored","pendingForCommit","ignoredObjects","filtered","nameFiltered","descriptionFiltered","selectedState","_GxIdeTeamDevCommit_evaluateSecondaryFilterHasConditions","selectedFolder","filterSecondaryHasConditions","_GxIdeTeamDevCommit_toggleFiltersHandler","filterSecondaryIsHidden","_GxIdeTeamDevCommit_searchInputHandler","trim","_GxIdeTeamDevCommit_typeChangedHandler","selectedType","_GxIdeTeamDevCommit_loadData","_GxIdeTeamDevCommit_stateChangedHandler","_GxIdeTeamDevCommit_folderChanged","_GxIdeTeamDevCommit_onRowContextMenuHandler","ev","preventDefault","stopPropagation","getSelectedRows","objectsContextMenuCallback","clientX","clientY","__classPrivateFieldSet","addedRowsIds","addedRowsId","removedRowsId","pendingItemCheckedResult","pendingItemsCheckedCallback","itemsChecked","itemsUnchecked","undefined","_GxIdeTeamDevCommit_revertPendingCommitsCheckboxes","_GxIdeTeamDevCommit_togglePendingCommitsCheckboxes","_GxIdeTeamDevCommit_setInitialObjectsStatus","objectsRenderedAlready","pendingObject","ignoredObject","loading","loadCallback","selectedChangeset","selectedCategory","_GxIdeTeamDevCommit_markPendingObjects","pendingId","rowId","itemsToToggle","itemsToCheck","itemsToUncheck","markedObjectsSetChanged","newMarkedObjectsSet","atLeastOneObjectIsChecked","objectsStatusMapChanged","newObjectsStatusMap","someObjectIsUpdating","entries","find","pendingAndIgnoredChanged","clear","_a","pending","_b","ignored","typesChanged","newTypes","typesComboBoxModel","changesetChanged","newChangesetOptions","changesetsComboBoxModel","folderChanged","newFolderOptions","foldersComboBoxModel","componentWillLoad","Locale","getComponentStrings","all","types","folders","componentDidLoad","reload","render","disableControls","filterIcon","commitButtonEnabled","Host","model","commitDetail","title","genexusServer","serverDetails","serverUrl","openServerCallback","knowledgeBase","kbName","version","versionName","disabled","accessibleName","searchAccessibleName","placeholder","searchPlaceholder","onInput","typeAccesibleName","typePlaceholder","localStateAccesibleName","localStatePlaceholder","secondaryFilterAriaLabel","inert","hidden","folderAccesibleName","folderPlaceholder","multiline","autoGrow","commitCommentPlaceholder","keyboardNavigationMode","rowSelectionMode","onSelectionChanged","onRowMarkingChanged","onRowContextMenu","pendingCommits","isAnimated","stateIconSrc","stateTitle","cancelLabel","loader","loaderTitle","show"],"sources":["src/components/team-dev/version-control/common/clear-grid-selection.ts","src/components/team-dev/version-control/common/header-renders.tsx","src/components/team-dev/version-control/commit/utilities/changeset-to-combo-box.ts","src/components/team-dev/version-control/commit/utilities/folders-to-combo-box.ts","src/components/team-dev/version-control/commit/utilities/types-to-combo-box.ts","src/components/team-dev/version-control/common/constants.ts","src/components/team-dev/version-control/common/tabular-grid-render.tsx","src/components/team-dev/version-control/commit/commit.scss?tag=gx-ide-team-dev-commit&encapsulation=shadow","src/components/team-dev/version-control/commit/commit.tsx"],"sourcesContent":["import { SourceType } from \"./types\";\n\n/**\n * Filters a grid selection to only include rows from the given source (\"pending\" or \"ignored\").\n * Rows from the other category are unselected.\n *\n * @param {SourceType} gridSource - The source category of the selection.\n * @param {string[]} selectedRowsIds - The currently selected row IDs.\n * @returns {string[]} Filtered row IDs belonging to the specified source.\n */\nconst clearGridSelection = (\n gridSource: SourceType,\n selectedRowsIds: string[],\n pendingIdsSet: Set<string>,\n ignoredIdsSet: Set<string>,\n gridReference: HTMLChTabularGridElement\n): string[] => {\n let filteredSelectedRowsIds: string[] = [];\n if (selectedRowsIds.length > 1 && gridSource === \"pending\") {\n selectedRowsIds.forEach(async selectedRowId => {\n if (ignoredIdsSet.has(selectedRowId)) {\n await gridReference.selectRow(selectedRowId, false);\n } else {\n filteredSelectedRowsIds.push(selectedRowId);\n }\n });\n } else if (selectedRowsIds.length > 1 && gridSource === \"ignored\") {\n selectedRowsIds.forEach(async selectedRowId => {\n if (pendingIdsSet.has(selectedRowId)) {\n await gridReference.selectRow(selectedRowId, false);\n } else {\n filteredSelectedRowsIds.push(selectedRowId);\n }\n });\n } else {\n filteredSelectedRowsIds = selectedRowsIds;\n }\n return filteredSelectedRowsIds;\n};\n\nexport default clearGridSelection;\n","import { h, JSX } from \"@stencil/core\";\n\nconst headerDetail = (\n type: \"text\" | \"link\" = \"text\",\n caption: string,\n description: string,\n callback?: () => void,\n cssClass?: string\n): JSX.Element => {\n return (\n <div class={{ [cssClass]: true, \"field field-block\": true }}>\n <span class=\"detail__label body-semi-bold-s\">{caption}</span>\n {type === \"text\" ? (\n <p class=\"body-regular-s\">{description}</p>\n ) : (\n <button class=\"detail__link body-regular-s\" onClick={callback}>\n {description}\n </button>\n )}\n </div>\n );\n};\nexport default headerDetail;\n\nexport const headerTitle = (caption: string, cssClass?: string) => {\n return (\n <h2\n class={{ [cssClass]: true, \"header__title subtitle-semi-bold-s\": true }}\n >\n {caption}\n </h2>\n );\n};\n\nexport const headerSubtitle = (caption: string, cssClass?: string) => {\n return (\n <p\n class={{ [cssClass]: true, \"detail__title subtitle-semi-bold-xs\": true }}\n >\n {caption}\n </p>\n );\n};\n","import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../../../../../components\";\n\nexport const changesetToComboBoxModel = (\n changesetModel: GxOption[]\n): ComboBoxModel => {\n if (!changesetModel) return [];\n\n return changesetModel.map(changeset => ({\n value: changeset.id,\n caption:\n changeset.name === \"All\"\n ? \"All Changesets\"\n : changeset.label || changeset.name || \"\"\n }));\n};\n","import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { GxOption } from \"../../../../../components\";\n\nexport const foldersToComboBoxModel = (\n foldersModel: GxOption[]\n): ComboBoxModel =>\n foldersModel.map(folder => ({\n value: folder.name,\n caption:\n folder.name === \"All\" ? \"All Modules\" : folder.label || folder.name || \"\"\n }));\n","import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType } from \"../../../../../components\";\n\nexport const typesToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name === \"All\" ? \"All Types\" : objectType.name || \"\",\n startImgSrc: objectType.icon\n }));\n","import { getIconPath } from \"@genexus/mercury\";\n\nexport const ALL_VALUE = \"All\";\nexport const ALL_MODULES = \"All Modules\";\nexport const ALL_TYPES = \"All Types\";\n\nexport const CSS_SELECTORS = {\n HEADER: \"header spacing-body-inline spacing-body-block-start field-group\",\n HEADER_DETAILS: \"header__details\",\n FILTER: \"filter\",\n MAIN: \"main spacing-body\",\n GRID_CELL_DESCRIPTION: \"tabular-grid-cell-description-custom-selector\"\n};\n\nconst ICONS = {\n add: getIconPath({\n category: \"system\",\n name: \"add\",\n colorType: \"on-elevation\"\n }),\n edit: getIconPath({\n category: \"system\",\n name: \"edit\",\n colorType: \"on-elevation\"\n }),\n error: getIconPath({\n category: \"system\",\n name: \"error\",\n colorType: \"error\"\n }),\n filter: getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"neutral\"\n }),\n filterWithConditions: getIconPath({\n category: \"window-tools\",\n name: \"filter-conditions\",\n colorType: \"neutral\"\n }),\n info: getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-elevation\"\n }),\n refresh: getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"neutral\"\n }),\n search: getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-elevation\"\n }),\n success: getIconPath({\n category: \"system\",\n name: \"check\",\n colorType: \"success\"\n }),\n substract: getIconPath({\n category: \"system\",\n name: \"substract\",\n colorType: \"on-elevation\"\n }),\n warning: getIconPath({\n category: \"system\",\n name: \"warning\",\n colorType: \"warning\"\n })\n};\nexport default ICONS;\n","// stencil\nimport { h, JSX } from \"@stencil/core\";\n\n// external libraries\nimport HTMLChTabularGridRowElement from \"@genexus/chameleon-controls-library/dist/types/components/tabular-grid/row/tabular-grid-row\";\n\n// local\nimport {\n MessageData,\n ModifiedObjectData,\n SourceType,\n StatusInternal\n} from \"./types\";\nimport { ObjectState } from \"../common/types\";\nimport ICONS from \"./constants\";\nimport { renderObjectTypeWithIcon } from \"../../common/utilities\";\nimport { formatDate } from \"../../../../common/helpers\";\nimport { CSS_SELECTORS as CLASSES } from \"./constants\";\nimport { hiChar } from \"../../../ww-files/helpers\";\nimport { config } from \"../../../../common/config\";\n\nconst BUTTON_ACTION_SELECTOR = \"button-action-custom-selector\";\n\nconst renderStateCellContent = (\n action: ObjectState,\n componentLocale: any\n): JSX.Element[] | null | string => {\n let icon: string;\n let caption: string;\n let iconColor: string;\n\n if (action === \"deleted\") {\n icon = ICONS.substract;\n caption = componentLocale.states.deleted;\n iconColor = \"--mer-icon__error\";\n } else if (action === \"inserted\") {\n icon = ICONS.add;\n caption = componentLocale.states.inserted;\n iconColor = \"--mer-icon__success\";\n } else if (action === \"modified\") {\n icon = ICONS.edit;\n caption = componentLocale.states.modified;\n iconColor = \"--mer-icon__warning\";\n } else if (action === \"conflicted\") {\n icon = ICONS.warning;\n caption = componentLocale.states.conflicted;\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\nconst renderObjectStatus = (\n objectId: string,\n objectsStatusMap: Map<string, StatusInternal>,\n updatePillAsButton: boolean,\n commitSingleObject: (objectId: string) => () => void,\n componentLocale: any\n): JSX.Element[] => {\n const status = objectsStatusMap.get(objectId);\n const caption =\n status === \"pending\" && updatePillAsButton\n ? componentLocale.status.commit\n : componentLocale.status[status];\n\n if (status === \"commiting\") {\n return <span class=\"spinner-caption\">{caption}</span>;\n }\n\n const classes = `pill pill--${status}`;\n if (updatePillAsButton && status === \"pending\") {\n return (\n <button\n class={{\n \"button-secondary\": true,\n \"button-icon-and-text\": true,\n \"pill\": true,\n \"pill--update\": true,\n [BUTTON_ACTION_SELECTOR]: true\n }}\n onClick={commitSingleObject(objectId)}\n >\n {caption}\n </button>\n );\n } else {\n return <span class={classes}>{caption}</span>;\n }\n};\n\nconst renderTabularGridRows = (\n type: SourceType,\n pendingObjectsAfterFilter: ModifiedObjectData[],\n ignoredObjectsAfterFilter: ModifiedObjectData[],\n alreadyUpdatedObjectsIdsSet: Set<string>,\n markedObjectsSet: Set<string>,\n objectsMessagesDataMap: Map<string, MessageData[]>,\n updatePillAsButton: boolean,\n commitSingleObject: (objectId: string) => () => void,\n objectsStatusMap: Map<string, StatusInternal>,\n searchValue: string,\n componentLocale: any\n): HTMLChTabularGridRowElement[] => {\n let objects: ModifiedObjectData[];\n if (type === \"pending\") {\n objects = pendingObjectsAfterFilter;\n } else if (type === \"ignored\") {\n objects = ignoredObjectsAfterFilter;\n }\n\n searchValue = searchValue.toLowerCase();\n\n const filteredRows = objects.map(object => {\n const alreadyUpdated = alreadyUpdatedObjectsIdsSet.has(object.id);\n const hideCheckbox = alreadyUpdated || type === \"ignored\";\n const marked = markedObjectsSet.has(object.id);\n const messages = 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) => marked && el?.setAttribute(\"marked\", \"true\")}\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 <div\n // This div is a WA to prevent the cell display:flex to\n // apply columns when hiChar is applied. hiChar creates\n // a span for every match.\n >\n {hiChar(object.name, searchValue)}\n </div>\n {/* {object.name} */}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderObjectTypeWithIcon(object.type)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell\n class={{\n \"tabular-grid-cell\": true,\n [CLASSES.GRID_CELL_DESCRIPTION]: true\n }}\n >\n <div\n // This div is a WA to prevent the cell display:flex to\n // apply columns when hiChar is applied. hiChar creates\n // a span for every match.\n >\n {hiChar(object.description, searchValue)}\n </div>\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 {object.module}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {renderStateCellContent(object.state, componentLocale)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {formatDate(object.lastSynchronized)}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell--for-pill\">\n {renderObjectStatus(\n object.id,\n objectsStatusMap,\n updatePillAsButton,\n commitSingleObject,\n componentLocale\n )}\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 = ICONS.error;\n } else if (message.type === \"warning\") {\n MESSAGE_ICON = ICONS.warning;\n } else if (message.type === \"success\") {\n MESSAGE_ICON = ICONS.success;\n } else {\n // info\n MESSAGE_ICON = ICONS.info;\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 // this.objectsRenderedAlready = true;\n\n return filteredRows;\n};\n\nexport default renderTabularGridRows;\n\nexport type GridColumnType =\n | \"action\"\n | \"description\"\n | \"lastSynchronized\"\n | \"localState\"\n | \"modifiedOn\"\n | \"module\"\n | \"name\"\n | \"status\"\n | \"type\";\n\nexport type GridColumnSet = Partial<Record<GridColumnType, true>>;\n\nexport const renderTabularGridColumns = (\n ignoredGridColumns: GridColumnType[],\n gridIsEmpty: boolean = false,\n componentLocale: any\n): JSX.Element => {\n const colSize = gridIsEmpty\n ? config.tabularGrid.colSize.auto\n : config.tabularGrid.colSize.maxContent;\n\n return (\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n {!ignoredGridColumns.includes(\"name\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"name\"\n columnName={componentLocale.objects.name}\n columnType=\"rich\"\n richRowSelector={true}\n richRowSelectorMode=\"mark\"\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"type\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"type\"\n columnName={componentLocale.objects.type}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"description\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"description\"\n columnName={componentLocale.objects.description}\n settingable={false}\n size={config.tabularGrid.colSize.description}\n />\n )}\n\n {!ignoredGridColumns.includes(\"modifiedOn\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"modifiedOn\"\n columnName={componentLocale.objects.modifiedOn}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"module\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"module\"\n columnName={componentLocale.objects.module}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"localState\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"localState\"\n columnName={componentLocale.objects.localState}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"lastSynchronized\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"lastSynchronized\"\n columnName={componentLocale.objects.lastSynchronized}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"action\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"action\"\n columnName={componentLocale.objects.action}\n settingable={false}\n size={colSize}\n />\n )}\n\n {!ignoredGridColumns.includes(\"status\") && (\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n columnId=\"status\"\n columnName={componentLocale.objects.status}\n settingable={false}\n size={gridIsEmpty ? \"auto\" : \"100px\"}\n />\n )}\n </ch-tabular-grid-columnset>\n );\n};\n","@use \"../common/common.scss\" as *;\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// header detail\n.header__details {\n grid-template-areas:\n \"detail-heading-gx . . .\"\n \"detail-genexus-server detail-knowledge-base detail-version detail-last-full-update\";\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-detail-start;\n}\n.detail__knowledge-base {\n grid-area: detail-knowledge-base;\n @extend %header-detail-common;\n}\n.detail__version {\n grid-area: detail-version;\n @extend %header-detail-end;\n}\n\n// filter\n.filter-container {\n container-type: inline-size;\n box-sizing: border-box;\n display: grid;\n column-gap: 12px;\n grid-template-areas:\n \"filter-primary filter-toggle-button filter-action-buttons\"\n \"filter-secondary . .\"\n \"comments comments comments\";\n grid-template-columns: minmax(0, max-content) max-content 1fr;\n}\n.filter {\n @extend %filter;\n}\n.filter-primary {\n grid-area: filter-primary;\n grid-template-columns: $filterControlInlineSize $filterControlInlineSize $filterControlInlineSize;\n}\n.filter-container > :nth-child(2) {\n grid-area: filter-toggle-button;\n}\n.filter-container > :nth-child(3) {\n grid-area: filter-action-buttons;\n justify-content: end;\n}\n.filter__toggle-secondary-filter-btn {\n grid-area: filter-toggle-button;\n}\n\n.filter__buttons {\n grid-area: filter-buttons;\n margin-inline-start: auto;\n}\n\n// secondary filter (hidden by default)\n.filter-secondary {\n display: grid;\n grid-template-rows: 0fr;\n grid-area: filter-secondary;\n transition: grid-template-rows var(--mer-timing--fast);\n}\n.filter-secondary--visible {\n grid-template-rows: 1fr;\n}\n.filter-secondary > div {\n @extend %filter;\n display: grid;\n overflow: hidden;\n font-size: 0; // WA Remove unwanted additional space\n grid-template-columns: repeat(3, $filterControlInlineSize);\n}\n\n.filter-secondary > div > .combo-box,\n.comments {\n margin-block-start: $filterRowGap;\n}\n.comments {\n grid-area: comments;\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: $filterControlInlineSize;\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","// stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n Watch\n} from \"@stencil/core\";\n\n// external libraries\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport {\n ChEditCustomEvent,\n ComboBoxModel,\n TabularGridMarkingChangedEvent,\n TabularGridRowContextMenuEvent,\n TabularGridSelectionChangedEvent\n} from \"@genexus/chameleon-controls-library\";\n\n// local\nimport { Locale } from \"../../../../common/locale\";\nimport {\n GxOption,\n ItemsCheckedResult,\n ObjectType\n} from \"../../../../common/types\";\nimport clearGridSelection from \"../common/clear-grid-selection\";\n\nimport type {\n StateForFilter,\n StatusInternal,\n MessageData,\n ModifiedObjectData,\n CommitData,\n CommitCallback,\n ContextMenuCallback,\n LoadCallback,\n PendingItemsCheckedCallback,\n SelectCallback,\n ServerDetails,\n SourceType\n} from \"../common/types\";\n\nimport headerDetail, { headerTitle } from \"../common/header-renders\";\nimport { changesetToComboBoxModel } from \"./utilities/changeset-to-combo-box\";\nimport { foldersToComboBoxModel } from \"./utilities/folders-to-combo-box\";\nimport { typesToComboBoxItemModel } from \"./utilities/types-to-combo-box\";\nimport renderTabularGridRows, {\n renderTabularGridColumns\n} from \"../common/tabular-grid-render\";\n\nimport { CSS_SELECTORS as CLASSES, ALL_VALUE } from \"../common/constants\";\nimport ICONS from \"../common/constants\";\n\nconst FILTER_SECONDARY_CONTAINER_ID = \"filters-secondary-container\";\nconst FILTER_SECONDARY_BUTTON_ID = \"filter-toggle-button\";\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\n@Component({\n tag: \"gx-ide-team-dev-commit\",\n styleUrl: \"commit.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/team-dev-commit\"]\n})\nexport class GxIdeTeamDevCommit {\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\n /**\n * The ComboBoxModel for \"Local State\" filter.\n */\n #localStatesComboBoxModel: { caption: string; value: StateForFilter }[];\n\n /**\n * Used to determine if pendingItemsCheckedCallback callback has to be\n * called or not. It should be ignored if the grid checkboxes state is\n * changed programmatically, by setting markRow to false once the object\n * has been successfully updated, for example.\n */\n #rowCheckedChangedByTheUser: boolean = true;\n\n @Element() el: HTMLGxIdeTeamDevCommitElement;\n\n /**\n * A reference to the tablar grid. Used to call methods.\n */\n #chGridPendingForUpdateEl!: HTMLChTabularGridElement;\n\n // sets\n\n /**\n * A set that holds the id's of the objects that have been updated already.\n */\n @State() alreadyCommitedObjectsIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the ids of all the ignored objects. Used to quickly\n * determine if the selected rows belong to \"ignored\" or not. This\n * information is required for the ContextMenuCallback callback. This set\n * has to be updated on every loadCallback.\n */\n @State() ignoredIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that holds the id's of all the pending objects. Used to quickly\n * determine if the selected rows belong to \"pending\" or \"igonred\". This\n * information is required for the ContextMenuCallback callback. This set\n * has to be updated after every loadCallback.\n */\n @State() pendingIdsSet: Set<string> = new Set<string>([]);\n\n /**\n * A set that stores the marked state of each object cell. This is\n * necessary because filtering the grid causes marked cells to lose\n * 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 // maps\n\n /**\n * A map that holds the current update objects states (\"inserted\" |\n * \"modified\" | \"modified-with-conflicts\" | \"deleted\" | \"updating\" |\n * \"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 === \"commiting\"\n );\n\n if (!someObjectIsUpdating) {\n this.commiting = false;\n }\n }\n\n /**\n * A map that holds object messages, after trying to commit ('info' |\n * 'success' | 'warning' | 'error')\n */\n @State() objectsMessagesDataMap: Map<string, MessageData[]> = new Map();\n\n // boolean\n\n /**\n * It holds a boolean indicating if at least one object from the\n * tabular-grid is checked, for merging.\n */\n @State() atLeastOneObjectIsChecked: boolean = false;\n\n /**\n * A boolean to indicate if the comments input has error or not.\n */\n @State() commentInputHasError: boolean = false;\n\n /**\n * Set to true when objects are being commited. This helps disabling\n * controls until all objects are done.\n */\n @State() commiting: boolean = false;\n\n /**\n * Hides or shows the filter secondary controls\n */\n @State() filterSecondaryIsHidden = true;\n\n /**\n * Indicates if any of the filter secondary controls have a condition\n * (have a value other than default \"All\"). This changes the filter\n * toggle button icon, from \"filter\" to \"filterWithConditions\".\n */\n @State() filterSecondaryHasConditions = false;\n\n /**\n * Used to display a loader. Set to true when loadCallback is called.\n */\n @State() loading: boolean = true;\n\n /**\n * Used to mark all the grid checkboxes, only on the first render.\n */\n @State() objectsRenderedAlready: boolean = false;\n\n // models\n\n /**\n * changeset options as ComboBoxModel\n */\n @State() changesetsComboBoxModel: ComboBoxModel;\n\n /**\n * categories options as ComboBoxModel\n */\n // @State() categoriesComboBoxModel: ComboBoxModel;\n\n /**\n * Pending objects after \"action\" filter\n */\n @State() pendingObjectsAfterFilter: ModifiedObjectData[] = [];\n\n /**\n * Ignored objects after \"action\" filter\n */\n @State() ignoredObjectsAfterFilter: ModifiedObjectData[] = [];\n\n /**\n * The ComboBoxModel for \"Types\" filter.\n */\n @State() typesComboBoxModel: ComboBoxModel = [];\n\n /**\n * All objects (\"pending for update\" and \"ignored objects\") before\n * \"state\" filter\n */\n @State() pendingAndIgnored: CommitData = {\n pendingForCommit: [],\n ignoredObjects: []\n };\n @Watch(\"pendingAndIgnored\")\n pendingAndIgnoredChanged() {\n this.#applyClientFilter();\n this.pendingIdsSet.clear();\n this.pendingAndIgnored.pendingForCommit?.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 // current values\n\n /**\n * Holds the current value for the commit \"comments\"\n */\n @State() commentsValue: string = \"\";\n\n /**\n * The current search filter value.\n */\n @State() searchValue: string = \"\";\n\n /**\n * Holds the current value for the \"type\" filter\n */\n @State() selectedType: string;\n\n /**\n * Holds the current value for the \"local state\" filter\n */\n @State() selectedState: StateForFilter = ALL_VALUE;\n\n /**\n * Holds the current value for the \"changeset\" filter\n */\n @State() selectedChangeset: string;\n\n /**\n * Holds the current value for the \"folder\" filter\n */\n @State() selectedFolder: string;\n\n /**\n * Holds the current value for the \"category\" filter\n */\n @State() selectedCategory: string;\n\n /**\n * folder options as ComboBoxModel\n */\n @State() foldersComboBoxModel: ComboBoxModel;\n\n // callbacks\n\n /**\n * Invoked when user starts the commit process\n */\n @Prop() readonly commitCallback: CommitCallback;\n\n /**\n * Invoked when user activates the context menu on any of the grids.\n */\n @Prop() readonly objectsContextMenuCallback!: ContextMenuCallback;\n\n /**\n * Invoked to return the list of data types loaded from file\n * or url.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Invoked when user clicks in server url of Update From group.\n */\n @Prop() readonly openServerCallback!: () => Promise<void>;\n\n /**\n * Invoked to return information of a Font type of data.\n */\n @Prop() readonly pendingItemsCheckedCallback!: PendingItemsCheckedCallback;\n\n /**\n * Invoked when the user selects rows from the grid\n */\n @Prop() readonly selectCallback: SelectCallback;\n\n // models\n\n /**\n * \"types\" options for the filter.\n */\n @Prop() readonly types: ObjectType[];\n @Watch(\"types\")\n typesChanged(newTypes: ObjectType[]) {\n this.typesComboBoxModel = typesToComboBoxItemModel(newTypes);\n }\n\n /**\n * \"changeset\" options for the filter.\n */\n @Prop() readonly changeset: GxOption[];\n @Watch(\"changeset\")\n changesetChanged(newChangesetOptions: GxOption[]) {\n this.changesetsComboBoxModel =\n changesetToComboBoxModel(newChangesetOptions);\n }\n\n /**\n * \"folder\" options for the filter.\n */\n @Prop() readonly folders: GxOption[];\n @Watch(\"folders\")\n folderChanged(newFolderOptions: GxOption[]) {\n this.foldersComboBoxModel = foldersToComboBoxModel(newFolderOptions);\n }\n\n /**\n * \"category\" options for the filter.\n */\n // @Prop() readonly categories: GxOption[];\n // @Watch(\"categories\")\n // categoryChanged(newCategoryOptions: GxOption[]) {\n // this.categoriesComboBoxModel =\n // categoriesToComboBoxModel(newCategoryOptions);\n // }\n\n // boolean\n\n /**\n * If true, the \"Action\" column will display a button instead of a pill,\n * only when the action is\n */\n @Prop() readonly updatePillAsButton: boolean = false;\n\n /**\n * Information to show in Update From group.\n */\n @Prop() readonly serverDetails: ServerDetails;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Initiate \"actions\" combo box filter\n this.#localStatesComboBoxModel = [\n {\n caption: this.#componentLocale.states.all,\n value: ALL_VALUE\n },\n {\n caption: this.#componentLocale.states.inserted,\n value: \"inserted\"\n },\n {\n caption: this.#componentLocale.states.modified,\n value: \"modified\"\n },\n {\n caption: this.#componentLocale.states.conflicted,\n value: \"conflicted\"\n },\n {\n caption: this.#componentLocale.states.deleted,\n value: \"deleted\"\n }\n ];\n\n // intialize combo-box models\n\n this.typesComboBoxModel = typesToComboBoxItemModel(this.types);\n this.selectedType = this.typesComboBoxModel[0].value;\n\n this.selectedState = this.#localStatesComboBoxModel[0].value;\n\n this.changesetChanged(this.changeset);\n this.selectedChangeset =\n this.changesetsComboBoxModel.length > 0\n ? this.changesetsComboBoxModel[0].value\n : ALL_VALUE;\n\n this.folderChanged(this.folders);\n this.selectedFolder =\n this.foldersComboBoxModel && this.foldersComboBoxModel.length > 0\n ? this.foldersComboBoxModel[0].value\n : ALL_VALUE;\n\n // this.categoryChanged(this.categories);\n // this.selectedCategory =\n // this.categoriesComboBoxModel.length > 0\n // ? this.categoriesComboBoxModel[0].value\n // : ALL_VALUE;\n\n this.#evaluateSecondaryFilterHasConditions();\n }\n\n async componentDidLoad() {\n await this.#loadData();\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();\n }\n\n // commit related\n\n #commitCheckedClickedHandler = () => {\n this.#commitObjectsHandler([...this.markedObjectsSet]);\n };\n\n #commitSingleObject: (objectId: string) => () => void =\n objectId => async () => {\n const newobjectsStatusMap = new Map(this.objectsStatusMap);\n newobjectsStatusMap.set(objectId, \"commiting\");\n this.objectsStatusMap = newobjectsStatusMap;\n this.#commitObjectsHandler([objectId]);\n };\n\n #commitObjectsHandler = async (selection: string[]) => {\n if (this.commentsValue.length === 0) {\n // A comment is required to commit.\n this.commentInputHasError = true;\n return;\n }\n this.commentInputHasError = false;\n this.commiting = true;\n\n selection.forEach(itemToUpdate => {\n this.objectsStatusMap.set(itemToUpdate, \"commiting\");\n });\n\n const commitResult = await this.commitCallback(\n selection,\n this.commentsValue\n );\n\n commitResult.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 === \"commited\") {\n this.alreadyCommitedObjectsIdsSet.add(objectResult.id);\n this.objectsStatusMap.set(objectResult.id, \"commited\");\n await this.#chGridPendingForUpdateEl.markRow(objectResult.id, false);\n } else {\n this.objectsStatusMap.set(objectResult.id, \"pending\");\n }\n });\n\n this.commiting = false;\n };\n\n // handlers\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.alreadyCommitedObjectsIdsSet.has(markedObjectId)\n )\n );\n\n if (this.#rowCheckedChangedByTheUser) {\n this.#updatePendingCheckedItems(event);\n }\n };\n\n #rowSelectionChangedHandler = async (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n const selectedRowsIds = event.detail.rowsId;\n const firstSelectedRowId = selectedRowsIds[0];\n const gridSource: SourceType = this.pendingIdsSet.has(firstSelectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n const filteredSelectedRowsIds = clearGridSelection(\n gridSource,\n selectedRowsIds,\n this.pendingIdsSet,\n this.ignoredIdsSet,\n this.#chGridPendingForUpdateEl\n );\n\n await this.selectCallback(gridSource, filteredSelectedRowsIds);\n };\n\n #commentsInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.commentsValue = event.detail as string;\n if (this.commentsValue.length && this.commentInputHasError) {\n // remove error style and tooltip\n this.commentInputHasError = false;\n }\n };\n\n // filter related\n\n #applyClientFilter = () => {\n this.pendingObjectsAfterFilter = this.#filteredObjects(\n this.pendingAndIgnored.pendingForCommit\n );\n this.ignoredObjectsAfterFilter = this.#filteredObjects(\n this.pendingAndIgnored.ignoredObjects\n );\n };\n\n #filteredObjects = (objects: ModifiedObjectData[]): ModifiedObjectData[] => {\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 // status\n if (this.selectedState && this.selectedState !== ALL_VALUE) {\n filtered = filtered.filter(object => object.state === this.selectedState);\n }\n\n return filtered;\n };\n\n #evaluateSecondaryFilterHasConditions = () => {\n if (\n // this.selectedChangeset !== ALL_VALUE ||\n this.selectedFolder !== ALL_VALUE\n // this.selectedCategory !== ALL_VALUE\n ) {\n this.filterSecondaryHasConditions = true;\n } else {\n this.filterSecondaryHasConditions = false;\n }\n };\n\n #toggleFiltersHandler = () => {\n this.filterSecondaryIsHidden = !this.filterSecondaryIsHidden;\n };\n\n #searchInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.searchValue = (event.detail as string).trim();\n this.#applyClientFilter();\n };\n\n #typeChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedType = event.detail as string;\n this.#loadData();\n };\n\n #stateChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n this.selectedState = event.detail as StateForFilter;\n this.#applyClientFilter();\n };\n\n // changeset is a WIP.\n // #changesetChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n // this.selectedChangeset = event.detail as string;\n // this.#loadData();\n // this.#evaluateSecondaryFilterHasConditions();\n // };\n\n #folderChanged = (event: CustomEvent<string> | InputEvent) => {\n this.selectedFolder = event.detail as string;\n this.#loadData();\n this.#evaluateSecondaryFilterHasConditions();\n };\n\n // #categoryChangedHandler = (event: CustomEvent<string> | InputEvent) => {\n // this.selectedCategory = event.detail as string;\n // this.#loadData();\n // this.#evaluateSecondaryFilterHasConditions();\n // };\n\n #onRowContextMenuHandler =\n () => async (ev: CustomEvent<TabularGridRowContextMenuEvent>) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n const selectedRowsIds =\n await this.#chGridPendingForUpdateEl.getSelectedRows();\n\n const firstSelectedRowId = selectedRowsIds[0];\n const gridSource = this.pendingIdsSet.has(firstSelectedRowId)\n ? \"pending\"\n : \"ignored\";\n\n await this.objectsContextMenuCallback(gridSource, {\n selection: selectedRowsIds,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\n\n // other methods\n\n #updatePendingCheckedItems = async (\n event: CustomEvent<TabularGridMarkingChangedEvent>\n ) => {\n this.#rowCheckedChangedByTheUser = false;\n const addedRowsIds = event.detail.addedRowsId;\n const removedRowsId = event.detail.removedRowsId;\n\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 this.#rowCheckedChangedByTheUser = true;\n };\n\n #setInitialObjectsStatus = (): void => {\n if (this.objectsRenderedAlready) {\n return;\n }\n this.pendingAndIgnored.pendingForCommit.forEach(pendingObject => {\n const status: StatusInternal = \"pending\";\n this.objectsStatusMap.set(pendingObject.id, status);\n });\n this.pendingAndIgnored.ignoredObjects.forEach(ignoredObject => {\n const status: StatusInternal = \"ignored\";\n this.objectsStatusMap.set(ignoredObject.id, status);\n });\n };\n\n #loadData = async (): Promise<void> => {\n this.loading = true;\n this.pendingAndIgnored = await this.loadCallback({\n search: this.searchValue,\n type: this.selectedType,\n changeset: this.selectedChangeset,\n folder: this.selectedFolder,\n category: this.selectedCategory\n });\n\n this.#setInitialObjectsStatus();\n this.loading = false;\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.alreadyCommitedObjectsIdsSet.has(pendingId)) {\n this.markedObjectsSet = new Set([...this.markedObjectsSet, pendingId]);\n }\n }\n };\n\n // render methods\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 render() {\n const disableControls = this.commiting || this.loading;\n const gridIsEmpty =\n this.pendingObjectsAfterFilter.length === 0 &&\n this.ignoredObjectsAfterFilter.length === 0;\n\n const filterIcon = this.filterSecondaryHasConditions\n ? ICONS.filterWithConditions\n : ICONS.filter;\n\n const commitButtonEnabled =\n this.atLeastOneObjectIsChecked && this.commentsValue.length > 0;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class={{ [CLASSES.HEADER]: true }}>\n <div\n // header details\n class={{ [CLASSES.HEADER_DETAILS]: true }}\n >\n {headerTitle(this.#componentLocale.commitDetail.title)}\n\n {\n // genexus server\n headerDetail(\n \"link\",\n this.#componentLocale.commitDetail.genexusServer,\n this.serverDetails ? this.serverDetails.serverUrl : \"\",\n this.openServerCallback,\n \"detail__genexus-server\"\n )\n }\n\n {\n // knowledge base\n headerDetail(\n \"text\",\n this.#componentLocale.commitDetail.knowledgeBase,\n this.serverDetails ? this.serverDetails.kbName : \"\",\n undefined,\n \"detail__knowledge-base\"\n )\n }\n\n {\n // version\n headerDetail(\n \"text\",\n this.#componentLocale.commitDetail.version,\n this.serverDetails ? this.serverDetails.versionName : \"\",\n undefined,\n \"detail__version\"\n )\n }\n </div>\n </header>\n\n <div class=\"filter-container spacing-body-inline\">\n <div class={{ [CLASSES.FILTER]: true, \"filter-primary\": true }}>\n <ch-edit\n // searchch-edit\n class=\"input filter__combo\"\n disabled={disableControls}\n startImgSrc={ICONS.search}\n accessibleName={\n this.#componentLocale.filter.searchAccessibleName\n }\n placeholder={this.#componentLocale.filter.searchPlaceholder}\n type=\"search\"\n onInput={this.#searchInputHandler}\n ></ch-edit>\n\n <ch-combo-box-render\n // types\n class=\"combo-box filter__combo\"\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 // local states\n class=\"combo-box filter__combo\"\n disabled={disableControls}\n model={this.#localStatesComboBoxModel}\n value={this.selectedState}\n onInput={this.#stateChangedHandler}\n accessibleName={\n this.#componentLocale.filter.localStateAccesibleName\n }\n placeholder={this.#componentLocale.filter.localStatePlaceholder}\n ></ch-combo-box-render>\n </div>\n\n <button\n // toggle secondary filter button\n id={FILTER_SECONDARY_BUTTON_ID}\n class=\"button-secondary button-icon-only\"\n disabled={disableControls}\n aria-label={this.#componentLocale.filter.secondaryFilterAriaLabel}\n aria-expanded={this.filterSecondaryIsHidden ? \"false\" : \"true\"}\n aria-controls={FILTER_SECONDARY_CONTAINER_ID}\n onClick={this.#toggleFiltersHandler}\n title={this.#componentLocale.filter.secondaryFilterAriaLabel}\n >\n <ch-image class=\"icon-md\" src={filterIcon}></ch-image>\n </button>\n\n <div class=\"buttons-spacer\">\n <button\n // reload button\n class=\"button-secondary button-icon-and-text\"\n disabled={disableControls}\n onClick={this.#loadData}\n >\n <ch-image class=\"icon-md\" src={ICONS.refresh}></ch-image>\n {this.#componentLocale.filter.reload}\n </button>\n\n <button\n // commit button\n class=\"button-primary\"\n disabled={!commitButtonEnabled || disableControls}\n onClick={this.#commitCheckedClickedHandler}\n >\n {this.#componentLocale.filter.commit}\n </button>\n </div>\n\n <div\n // secondary filter\n id={FILTER_SECONDARY_CONTAINER_ID}\n aria-labelledby={FILTER_SECONDARY_BUTTON_ID}\n class={{\n [CLASSES.FILTER]: true,\n \"filter-secondary\": true,\n \"filter-secondary--visible\": !this.filterSecondaryIsHidden\n }}\n inert={this.filterSecondaryIsHidden}\n hidden={this.filterSecondaryIsHidden}\n >\n <div>\n {/* \n // changeset is a WIP.\n <ch-combo-box-render\n // changeset\n class=\"combo-box\"\n disabled={disableControls}\n model={this.changesetsComboBoxModel}\n value={this.selectedChangeset}\n onInput={this.#changesetChangedHandler}\n accessibleName={\n this.#componentLocale.filter.changesetAccesibleName\n }\n placeholder={\n this.#componentLocale.filter.changesetPlaceholder\n }\n ></ch-combo-box-render> */}\n\n <ch-combo-box-render\n // folder\n class=\"combo-box\"\n disabled={disableControls}\n model={this.foldersComboBoxModel}\n value={this.selectedFolder}\n onInput={this.#folderChanged}\n accessibleName={\n this.#componentLocale.filter.folderAccesibleName\n }\n placeholder={this.#componentLocale.filter.folderPlaceholder}\n ></ch-combo-box-render>\n\n {/* <ch-combo-box-render\n // category\n class=\"combo-box\"\n disabled={disableControls}\n model={this.categoriesComboBoxModel}\n value={this.selectedCategory}\n onInput={this.#categoryChangedHandler}\n accessibleName={\n this.#componentLocale.filter.categoryPlaceholder\n }\n placeholder={this.#componentLocale.filter.categoryPlaceholder}\n ></ch-combo-box-render> */}\n </div>\n </div>\n\n <ch-edit\n // commit comments\n class=\"input comments\"\n multiline={true}\n autoGrow={true}\n placeholder={this.#componentLocale.commitCommentPlaceholder}\n onInput={this.#commentsInputHandler}\n ></ch-edit>\n </div>\n\n <div class={CLASSES.MAIN}>\n {!this.loading ? (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"objects-tabular-grid\": true,\n \"disabled-custom-selector\": this.commiting,\n \"empty-result\": gridIsEmpty\n }}\n keyboardNavigationMode=\"focus\"\n rowSelectionMode=\"multiple\"\n onSelectionChanged={this.#rowSelectionChangedHandler}\n onRowMarkingChanged={this.#rowMarkingChangedHandler}\n onRowContextMenu={this.#onRowContextMenuHandler()}\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridPendingForUpdateEl = el)\n }\n >\n {renderTabularGridColumns(\n [\"action\"],\n gridIsEmpty,\n this.#componentLocale\n )}\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.pendingCommits}\n </ch-tabular-grid-rowset-legend>\n {renderTabularGridRows(\n \"pending\",\n this.pendingObjectsAfterFilter,\n this.ignoredObjectsAfterFilter,\n this.alreadyCommitedObjectsIdsSet,\n this.markedObjectsSet,\n this.objectsMessagesDataMap,\n this.updatePillAsButton,\n this.#commitSingleObject,\n this.objectsStatusMap,\n this.searchValue,\n this.#componentLocale\n )}\n </ch-tabular-grid-rowset>,\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.ignoredObjects}\n </ch-tabular-grid-rowset-legend>\n {renderTabularGridRows(\n \"ignored\",\n this.pendingObjectsAfterFilter,\n this.ignoredObjectsAfterFilter,\n this.alreadyCommitedObjectsIdsSet,\n this.markedObjectsSet,\n this.objectsMessagesDataMap,\n this.updatePillAsButton,\n this.#commitSingleObject,\n this.objectsStatusMap,\n this.searchValue,\n this.#componentLocale\n )}\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={ICONS.filter}\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;GAUA,OAAMA,qBAAqB,CACzBC,GACAC,GACAC,GACAC,GACAC;EAEA,IAAIC,IAAoC;EACxC,IAAIJ,EAAgBK,SAAS,KAAKN,MAAe,WAAW;IAC1DC,EAAgBM,SAAQC,MAAMC;MAC5B,IAAIN,EAAcO,IAAID,IAAgB;cAC9BL,EAAcO,UAAUF,GAAe;aACxC;QACLJ,EAAwBO,KAAKH;;;SAG5B,IAAIR,EAAgBK,SAAS,KAAKN,MAAe,WAAW;IACjEC,EAAgBM,SAAQC,MAAMC;MAC5B,IAAIP,EAAcQ,IAAID,IAAgB;cAC9BL,EAAcO,UAAUF,GAAe;aACxC;QACLJ,EAAwBO,KAAKH;;;SAG5B;IACLJ,IAA0BJ;;EAE5B,OAAOI;AAAuB;;ACnChC,MAAMQ,eAAe,CACnBC,IAAwB,QACxBC,GACAC,GACAC,GACAC,MAGEC,EAAA;EAAKC,OAAO;IAAEF,CAACA,IAAW;IAAM,qBAAqB;;GACnDC,EAAA;EAAMC,OAAM;GAAkCL,IAC7CD,MAAS,SACRK,EAAA;EAAGC,OAAM;GAAkBJ,KAE3BG,EAAA;EAAQC,OAAM;EAA8BC,SAASJ;GAClDD;;AAQJ,MAAMM,cAAc,CAACP,GAAiBG,MAEzCC,EAAA;EACEC,OAAO;IAAEF,CAACA,IAAW;IAAM,sCAAsC;;GAEhEH;;AC1BA,MAAMQ,2BACXC;EAEA,KAAKA,GAAgB,OAAO;EAE5B,OAAOA,EAAeC,KAAIC,MAAS;IACjCC,OAAOD,EAAUE;IACjBb,SACEW,EAAUG,SAAS,QACf,mBACAH,EAAUI,SAASJ,EAAUG,QAAQ;;AAC1C;;ACXE,MAAME,yBACXC,KAEAA,EAAaP,KAAIQ,MAAM;EACrBN,OAAOM,EAAOJ;EACdd,SACEkB,EAAOJ,SAAS,QAAQ,gBAAgBI,EAAOH,SAASG,EAAOJ,QAAQ;;;ACNtE,MAAMK,2BACXC,KAEAA,EAAgBV,KAAIW,MAAU;EAC5BT,OAAOS,EAAWR;EAClBb,SAASqB,EAAWP,SAAS,QAAQ,cAAcO,EAAWP,QAAQ;EACtEQ,aAAaD,EAAWE;;;ACPrB,MAAMC,IAAY;;AAIlB,MAAMC,IAAgB;EAC3BC,QAAQ;EACRC,gBAAgB;EAChBC,QAAQ;EACRC,MAAM;EACNC,uBAAuB;;;AAGzB,MAAMC,IAAQ;EACZC,KAAKC,EAAY;IACfC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbC,MAAMH,EAAY;IAChBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbE,OAAOJ,EAAY;IACjBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbG,QAAQL,EAAY;IAClBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbI,sBAAsBN,EAAY;IAChCC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbK,MAAMP,EAAY;IAChBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbM,SAASR,EAAY;IACnBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbO,QAAQT,EAAY;IAClBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbQ,SAASV,EAAY;IACnBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbS,WAAWX,EAAY;IACrBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;EAEbU,SAASZ,EAAY;IACnBC,UAAU;IACVpB,MAAM;IACNqB,WAAW;;;;UC/Cf;MAAMW,IAAyB;;AAE/B,MAAMC,yBAAyB,CAC7BC,GACAC;EAEA,IAAI1B;EACJ,IAAIvB;EACJ,IAAIkD;EAEJ,IAAIF,MAAW,WAAW;IACxBzB,IAAOQ,EAAMa;IACb5C,IAAUiD,EAAgBE,OAAOC;IACjCF,IAAY;SACP,IAAIF,MAAW,YAAY;IAChCzB,IAAOQ,EAAMC;IACbhC,IAAUiD,EAAgBE,OAAOE;IACjCH,IAAY;SACP,IAAIF,MAAW,YAAY;IAChCzB,IAAOQ,EAAMK;IACbpC,IAAUiD,EAAgBE,OAAOG;IACjCJ,IAAY;SACP,IAAIF,MAAW,cAAc;IAClCzB,IAAOQ,EAAMc;IACb7C,IAAUiD,EAAgBE,OAAOI;IACjCL,IAAY;SACP,KAAKF,GAAQ;;IAElB,OAAO;;EAGT,OACE5C,EAAA;IAAMC,OAAM;KACVD,EAAA;IACEL,MAAK;IACLM,OAAM;IACNmD,KAAKjC;IACLkC,OAAO;MAAEC,iBAAiB,OAAOR;;MAElC,GAAGlD;AACC;;AAIX,MAAM2D,qBAAqB,CACzBC,GACAC,GACAC,GACAC,GACAd;EAEA,MAAMe,IAASH,EAAiBI,IAAIL;EACpC,MAAM5D,IACJgE,MAAW,aAAaF,IACpBb,EAAgBe,OAAOE,SACvBjB,EAAgBe,OAAOA;EAE7B,IAAIA,MAAW,aAAa;IAC1B,OAAO5D,EAAA;MAAMC,OAAM;OAAmBL;;EAGxC,MAAMmE,IAAU,cAAcH;EAC9B,IAAIF,KAAsBE,MAAW,WAAW;IAC9C,OACE5D,EAAA;MACEC,OAAO;QACL,oBAAoB;QACpB,wBAAwB;QACxB+D,MAAQ;QACR,gBAAgB;QAChBtB,CAACA,IAAyB;;MAE5BxC,SAASyD,EAAmBH;OAE3B5D;SAGA;IACL,OAAOI,EAAA;MAAMC,OAAO8D;OAAUnE;;;;AAIlC,MAAMqE,wBAAwB,CAC5BtE,GACAuE,GACAC,GACAC,GACAC,GACAC,GACAZ,GACAC,GACAF,GACAc,GACA1B;EAEA,IAAI2B;EACJ,IAAI7E,MAAS,WAAW;IACtB6E,IAAUN;SACL,IAAIvE,MAAS,WAAW;IAC7B6E,IAAUL;;EAGZI,IAAcA,EAAYE;EAE1B,MAAMC,IAAeF,EAAQlE,KAAIqE;IAC/B,MAAMC,IAAiBR,EAA4B7E,IAAIoF,EAAOlE;IAC9D,MAAMoE,IAAeD,KAAkBjF,MAAS;IAChD,MAAMmF,IAAST,EAAiB9E,IAAIoF,EAAOlE;IAC3C,MAAMsE,IAAWT,EAAuBT,IAAIc,EAAOlE;IAEnD,OACET,EAAA;MACEC,OAAM;MACN+E,KAAKL,EAAOlE;MACZwE,OAAON,EAAOlE;MACdyE,KAAMC,KAAoBL,MAAUK,MAAE,QAAFA,WAAE,aAAFA,EAAIC,aAAa,UAAU;OAE/DpF,EAAA;MAAA,aACY;MAAM,gBACH;MACbC,OAAO;QACL,qBAAqB;QACrB,+BAA+B4E;;MAEjCQ,MAAK;OAELrF,EAAA,aAKGsF,EAAOX,EAAOjE,MAAM6D,MAIzBvE,EAAA;MAAsBC,OAAM;OACzBsF,EAAyBZ,EAAOhF,QAEnCK,EAAA;MACEC,OAAO;QACL,qBAAqB;QACrB,CAACuF,EAAQ9D,wBAAwB;;OAGnC1B,EAAA,aAKGsF,EAAOX,EAAO9E,aAAa0E,MAGhCvE,EAAA;MAAsBC,OAAM;OACzBwF,EAAWd,EAAOe,cAErB1F,EAAA;MAAsBC,OAAM;OACzB0E,EAAOgB,SAEV3F,EAAA;MAAsBC,OAAM;OACzB0C,uBAAuBgC,EAAOiB,OAAO/C,KAExC7C,EAAA;MAAsBC,OAAM;OACzBwF,EAAWd,EAAOkB,oBAErB7F,EAAA;MAAsBC,OAAM;OACzBsD,mBACCoB,EAAOlE,IACPgD,GACAC,GACAC,GACAd,MAIHkC,MAAQ,QAARA,WAAQ,aAARA,EAAU5F,WACTa,EAAA;MAAwBC,OAAM;OAC5BD,EAAA;MACEC,OAAO;QACL,6BAA6B;;OAG/BD,EAAA;MAAIC,OAAM;OACP8E,EAASzE,KAAIwF;MACZ,IAAIC;MACJ,IAAID,EAAQnG,SAAS,SAAS;QAC5BoG,IAAepE,EAAMM;aAChB,IAAI6D,EAAQnG,SAAS,WAAW;QACrCoG,IAAepE,EAAMc;aAChB,IAAIqD,EAAQnG,SAAS,WAAW;QACrCoG,IAAepE,EAAMY;aAChB;;QAELwD,IAAepE,EAAMS;;MAGvB,OACEpC,EAAA;QAAIC,OAAM;SACRD,EAAA;QACEC,OAAM;QACNmD,KAAK2C;UAEND,EAAQE;AACN;AAOG;;IAM1B,OAAOtB;AAAY;;AAkBd,MAAMuB,2BAA2B,CACtCC,GACAC,IAAuB,OACvBtD;EAEA,MAAMuD,IAAUD,IACZE,EAAOC,YAAYF,QAAQG,OAC3BF,EAAOC,YAAYF,QAAQI;EAE/B,OACExG,EAAA;IAA2BC,OAAM;MAC7BiG,EAAmBO,SAAS,WAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQ9D;IACpCkG,YAAW;IACXC,iBAAiB;IACjBC,qBAAoB;IACpBC,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,WAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQ7E;IACpCoH,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,kBAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQ3E;IACpCkH,aAAa;IACb1B,MAAMgB,EAAOC,YAAYF,QAAQvG;OAInCqG,EAAmBO,SAAS,iBAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQkB;IACpCqB,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,aAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQmB;IACpCoB,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,iBAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQwC;IACpCD,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,uBAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQqB;IACpCkB,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,aAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQ5B;IACpCmE,aAAa;IACb1B,MAAMe;OAIRF,EAAmBO,SAAS,aAC5BzG,EAAA;IACEC,OAAM;IACNyG,UAAS;IACTC,YAAY9D,EAAgB2B,QAAQZ;IACpCmD,aAAa;IACb1B,MAAMc,IAAc,SAAS;;AAGP;;ACrWhC,MAAMc,IAAY;;;;;;;;;;;;;;;;;ACyDlB,MAAMC,IAAgC;;AACtC,MAAMC,IAA6B;;AAEnC,MAAMC,IAA8B,EAClC,qBACA,2BACA,oBACA,gBACA,oBACA,iBACA;;MASWC,IAAkB;;;;;;;QAK7BC,EAAAC,IAAAC,WAAA;;;eAKAC,EAAAF,IAAAC,WAAA;;;;;;eAQAE,EAAAH,IAAAC,MAAuC;;;eAOvCG,EAAAJ,IAAAC,WAAA;;QA2VAI,EAAAL,IAAAC,OAA+B;MAC7BK,EAAAL,MAAIM,GAAA,KAAsBC,KAA1BP,MAA2B,KAAIA,KAAKnD;AAAkB;IAGxD2D,EAAAT,IAAAC,OACEhE,KAAYnE;MACV,MAAM4I,IAAsB,IAAIC,IAAIV,KAAK/D;MACzCwE,EAAoBV,IAAI/D,GAAU;MAClCgE,KAAK/D,mBAAmBwE;MACxBJ,EAAAL,MAAIM,GAAA,KAAsBC,KAA1BP,MAA2B,EAAChE;AAAU;IAG1CsE,EAAAP,IAAAC,OAAwBnI,MAAO8I;MAC7B,IAAIX,KAAKY,cAAcjJ,WAAW,GAAG;;QAEnCqI,KAAKa,uBAAuB;QAC5B;;MAEFb,KAAKa,uBAAuB;MAC5Bb,KAAKc,YAAY;MAEjBH,EAAU/I,SAAQmJ;QAChBf,KAAK/D,iBAAiB8D,IAAIgB,GAAc;AAAY;MAGtD,MAAMC,UAAqBhB,KAAKiB,eAC9BN,GACAX,KAAKY;MAGPI,EAAapJ,SAAQC,MAAMqJ;QACzB,MAAM3D,IAAW2D,EAAa3D;QAC9B,IAAIA,EAAS5F,QAAQ;UACnBqI,KAAKlD,uBAAuBiD,IAAImB,EAAajI,IAAIiI,EAAa3D;eACzD;;UAELyC,KAAKlD,uBAAuBqE,OAAOD,EAAajI;;QAElD,IAAIiI,EAAaE,WAAW,YAAY;UACtCpB,KAAKqB,6BAA6BjH,IAAI8G,EAAajI;UACnD+G,KAAK/D,iBAAiB8D,IAAImB,EAAajI,IAAI;gBACrCoH,EAAAL,MAAIG,GAAA,KAA2BmB,QAAQJ,EAAajI,IAAI;eACzD;UACL+G,KAAK/D,iBAAiB8D,IAAImB,EAAajI,IAAI;;;MAI/C+G,KAAKc,YAAY;AAAK;;QAKxBS,EAAAxB,IAAAC,OAA4BnI,MAC1B2J;MAEA,MAAMC,IAAgBD,EAAME,OAAOC;MACnC3B,KAAKnD,mBAAmB,IAAI+E,IAC1BH,EAAc/G,QACZmH,MAAmB7B,KAAKqB,6BAA6BtJ,IAAI8J;MAI7D,IAAIxB,EAAAL,MAAIE,GAAA,MAA8B;QACpCG,EAAAL,MAAI8B,GAAA,KAA2BvB,KAA/BP,MAAgCwB;;;IAIpCO,EAAAhC,IAAAC,OAA8BnI,MAC5B2J;MAEA,MAAMlK,IAAkBkK,EAAME,OAAOC;MACrC,MAAMK,IAAqB1K,EAAgB;MAC3C,MAAMD,IAAyB2I,KAAKzI,cAAcQ,IAAIiK,KAClD,YACA;MAEJ,MAAMtK,IAA0BN,mBAC9BC,GACAC,GACA0I,KAAKzI,eACLyI,KAAKxI,eACL6I,EAAAL,MAAIG,GAAA;YAGAH,KAAKiC,eAAe5K,GAAYK;AAAwB;IAGhEwK,EAAAnC,IAAAC,OAAyBwB;MACvBxB,KAAKY,gBAAgBY,EAAME;MAC3B,IAAI1B,KAAKY,cAAcjJ,UAAUqI,KAAKa,sBAAsB;;QAE1Db,KAAKa,uBAAuB;;;;QAMhCsB,EAAApC,IAAAC,OAAqB;MACnBA,KAAKtD,4BAA4B2D,EAAAL,MAAIoC,GAAA,KAAiB7B,KAArBP,MAC/BA,KAAKqC,kBAAkBC;MAEzBtC,KAAKrD,4BAA4B0D,EAAAL,MAAIoC,GAAA,KAAiB7B,KAArBP,MAC/BA,KAAKqC,kBAAkBE;AACxB;IAGHH,EAAArC,IAAAC,OAAoBhD;MAClB,IAAIwF,IAAWxF;;YAGf,IAAIgD,KAAKjD,YAAYpF,QAAQ;QAC3B6K,IAAWA,EAAS9H,QAAOyC;UACzB,MAAMsF,IAAetF,EAAOjE,KACzB+D,cACAgC,SAASe,KAAKjD,YAAYE;UAE7B,MAAMyF,IAAsBvF,EAAO9E,YAChC4E,cACAgC,SAASe,KAAKjD,YAAYE;UAE7B,OAAOwF,KAAgBC;AAAmB;;;YAK9C,IAAI1C,KAAK2C,iBAAiB3C,KAAK2C,kBAAkB/I,GAAW;QAC1D4I,IAAWA,EAAS9H,QAAOyC,KAAUA,EAAOiB,UAAU4B,KAAK2C;;MAG7D,OAAOH;AAAQ;IAGjBI,EAAA7C,IAAAC,OAAwC;MACtC;;MAEEA,KAAK6C,mBAAmBjJ,GAExB;QACAoG,KAAK8C,+BAA+B;aAC/B;QACL9C,KAAK8C,+BAA+B;;;IAIxCC,EAAAhD,IAAAC,OAAwB;MACtBA,KAAKgD,2BAA2BhD,KAAKgD;AAAuB;IAG9DC,EAAAlD,IAAAC,OAAuBwB;MACrBxB,KAAKjD,cAAeyE,EAAME,OAAkBwB;MAC5C7C,EAAAL,MAAImC,GAAA,KAAmB5B,KAAvBP;AAAyB;IAG3BmD,EAAApD,IAAAC,OAAuBwB;MACrBxB,KAAKoD,eAAe5B,EAAME;MAC1BrB,EAAAL,MAAIqD,GAAA,KAAU9C,KAAdP;AAAgB;IAGlBsD,EAAAvD,IAAAC,OAAwBwB;MACtBxB,KAAK2C,gBAAgBnB,EAAME;MAC3BrB,EAAAL,MAAImC,GAAA,KAAmB5B,KAAvBP;AAAyB;;;;;;;QAU3BuD,EAAAxD,IAAAC,OAAkBwB;MAChBxB,KAAK6C,iBAAiBrB,EAAME;MAC5BrB,EAAAL,MAAIqD,GAAA,KAAU9C,KAAdP;MACAK,EAAAL,MAAI4C,GAAA,KAAsCrC,KAA1CP;AAA4C;;;;;;QAS9CwD,EAAAzD,IAAAC,OACE,MAAMnI,MAAO4L;MACXA,EAAGC;MACHD,EAAGE;MAEH,MAAMrM,UACE+I,EAAAL,MAAIG,GAAA,KAA2ByD;MAEvC,MAAM5B,IAAqB1K,EAAgB;MAC3C,MAAMD,IAAa2I,KAAKzI,cAAcQ,IAAIiK,KACtC,YACA;YAEEhC,KAAK6D,2BAA2BxM,GAAY;QAChDsJ,WAAWrJ;QACXwM,SAASL,EAAG/B,OAAOoC;QACnBC,SAASN,EAAG/B,OAAOqC;;AACnB;;QAKNjC,EAAA/B,IAAAC,OAA6BnI,MAC3B2J;MAEAwC,EAAAhE,MAAIE,GAA+B,OAAK;MACxC,MAAM+D,IAAezC,EAAME,OAAOwC;MAClC,MAAMC,IAAgB3C,EAAME,OAAOyC;MAEnC,MAAMC,UAAiCpE,KAAKqE,4BAA4B;QACtEC,cAAcL;QACdM,gBAAgBJ;;MAGlB,IAAIC,MAA6BI,WAAW;;cAEpCnE,EAAAL,MAAIyE,GAAA,KAAgClE,KAApCP,MAAqCiE,GAAcE;aACpD;cACC9D,EAAAL,MAAI0E,GAAA,KAAgCnE,KAApCP,MAAqCoE;;MAE7CJ,EAAAhE,MAAIE,GAA+B,MAAI;AAAA;IAGzCyE,EAAA5E,IAAAC,OAA2B;MACzB,IAAIA,KAAK4E,wBAAwB;QAC/B;;MAEF5E,KAAKqC,kBAAkBC,iBAAiB1K,SAAQiN;QAC9C,MAAMzI,IAAyB;QAC/B4D,KAAK/D,iBAAiB8D,IAAI8E,EAAc5L,IAAImD;AAAO;MAErD4D,KAAKqC,kBAAkBE,eAAe3K,SAAQkN;QAC5C,MAAM1I,IAAyB;QAC/B4D,KAAK/D,iBAAiB8D,IAAI+E,EAAc7L,IAAImD;AAAO;AACnD;IAGJiH,EAAAtD,IAAAC,OAAYnI;MACVmI,KAAK+E,UAAU;MACf/E,KAAKqC,0BAA0BrC,KAAKgF,aAAa;QAC/ClK,QAAQkF,KAAKjD;QACb5E,MAAM6H,KAAKoD;QACXrK,WAAWiH,KAAKiF;QAChB3L,QAAQ0G,KAAK6C;QACbvI,UAAU0F,KAAKkF;;MAGjB7E,EAAAL,MAAI2E,GAAA,KAAyBpE,KAA7BP;MACAA,KAAK+E,UAAU;;YAEf1E,EAAAL,MAAImF,GAAA,KAAoB5E,KAAxBP;AAA0B;;;;;;;gBAU5BmF,EAAApF,IAAAC,OAAsB;MACpB,KAAK,MAAMoF,KAAapF,KAAKzI,eAAe;QAC1C,KAAKyI,KAAKqB,6BAA6BtJ,IAAIqN,IAAY;UACrDpF,KAAKnD,mBAAmB,IAAI+E,IAAI,KAAI5B,KAAKnD,kBAAkBuI;;;;;QAOjEX,EAAA1E,IAAAC,OAAkCnI,OAChCoM,GACAE;MAEA,IAAI9D,EAAAL,MAAIG,GAAA,MAA4B;QAClC,KAAK,MAAMkF,KAASpB,GAAc;gBAC1B5D,EAAAL,MAAIG,GAAA,KAA2BmB,QAAQ+D,GAAO;;QAEtD,KAAK,MAAMA,KAASlB,GAAe;gBAC3B9D,EAAAL,MAAIG,GAAA,KAA2BmB,QAAQ+D,GAAO;;;;IAK1DX,EAAA3E,IAAAC,OAAkCnI,MAChCyN;MAEA,IAAIjF,EAAAL,MAAIG,GAAA,MAA4B;QAClC,MAAMoF,IAAyBD,EAAcC;QAC7C,MAAMC,IAA2BF,EAAcE;;gBAE/C,KAAK,MAAMH,KAASE,GAAc;gBAC1BlF,EAAAL,MAAIG,GAAA,KAA2BmB,QAAQ+D,GAAO;;;gBAGtD,KAAK,MAAMA,KAASG,GAAgB;gBAC5BnF,EAAAL,MAAIG,GAAA,KAA2BmB,QAAQ+D,GAAO;;;;wCA9nBL,IAAIzD,IAAY;yBAQ/B,IAAIA,IAAY;yBAQhB,IAAIA,IAAY;4BAOb,IAAIA,IAAY;4BAaA,IAAIlB;kCAgBC,IAAIA;qCAQpB;gCAKL;qBAMX;mCAKK;wCAOK;mBAKZ;kCAKe;;qCAiBgB;qCAKA;8BAKd;6BAMJ;MACvC4B,kBAAkB;MAClBC,gBAAgB;;yBAoBe;uBAKF;;yBAUU3I;;;;;;;;;;;;;;8BAqGM;;;EA/O/C,uBAAA6L,CAAwBC;IACtB1F,KAAK2F,4BAA4BD,EAAoB7H,OAAO;;EAY9D,uBAAA+H,CAAwBC;IACtB,MAAMC,IAAuB,KAAID,EAAoBE,YAAWC,MAC9D,EAAC,EAAG5H,OAAWA,MAAU;IAG3B,KAAK0H,GAAsB;MACzB9F,KAAKc,YAAY;;;EAuFrB,wBAAAmF;;IACE5F,EAAAL,MAAImC,GAAA,KAAmB5B,KAAvBP;IACAA,KAAKzI,cAAc2O;KACnBC,IAAAnG,KAAKqC,kBAAkBC,sBAAgB,QAAA6D,WAAA,aAAAA,EAAEvO,SAAQwO;MAC/CpG,KAAKzI,cAAc6C,IAAIgM,EAAQnN;AAAG;IAEpC+G,KAAKxI,cAAc0O;KACnBG,IAAArG,KAAKqC,kBAAkBE,oBAAc,QAAA8D,WAAA,aAAAA,EAAEzO,SAAQ0O;MAC7CtG,KAAKxI,cAAc4C,IAAIkM,EAAQrN;AAAG;;EAsFtC,YAAAsN,CAAaC;IACXxG,KAAKyG,qBAAqBlN,yBAAyBiN;;EAQrD,gBAAAE,CAAiBC;IACf3G,KAAK4G,0BACHhO,yBAAyB+N;;EAQ7B,aAAAE,CAAcC;IACZ9G,KAAK+G,uBAAuB3N,uBAAuB0N;;EA0BrD,uBAAME;IACJhD,EAAAhE,MAAIF,SAA0BmH,EAAOC,oBAAoBlH,KAAKrC,KAAG;;QAGjEqG,EAAAhE,MAAIC,GAA6B,EAC/B;MACE7H,SAASiI,EAAAL,MAAIF,GAAA,KAAkBvE,OAAO4L;MACtCnO,OAAOY;OAET;MACExB,SAASiI,EAAAL,MAAIF,GAAA,KAAkBvE,OAAOE;MACtCzC,OAAO;OAET;MACEZ,SAASiI,EAAAL,MAAIF,GAAA,KAAkBvE,OAAOG;MACtC1C,OAAO;OAET;MACEZ,SAASiI,EAAAL,MAAIF,GAAA,KAAkBvE,OAAOI;MACtC3C,OAAO;OAET;MACEZ,SAASiI,EAAAL,MAAIF,GAAA,KAAkBvE,OAAOC;MACtCxC,OAAO;SAEV;;QAIDgH,KAAKyG,qBAAqBlN,yBAAyByG,KAAKoH;IACxDpH,KAAKoD,eAAepD,KAAKyG,mBAAmB,GAAGzN;IAE/CgH,KAAK2C,gBAAgBtC,EAAAL,MAAIC,GAAA,KAA2B,GAAGjH;IAEvDgH,KAAK0G,iBAAiB1G,KAAKjH;IAC3BiH,KAAKiF,oBACHjF,KAAK4G,wBAAwBjP,SAAS,IAClCqI,KAAK4G,wBAAwB,GAAG5N,QAChCY;IAENoG,KAAK6G,cAAc7G,KAAKqH;IACxBrH,KAAK6C,iBACH7C,KAAK+G,wBAAwB/G,KAAK+G,qBAAqBpP,SAAS,IAC5DqI,KAAK+G,qBAAqB,GAAG/N,QAC7BY;;;;;;QAQNyG,EAAAL,MAAI4C,GAAA,KAAsCrC,KAA1CP;;EAGF,sBAAMsH;UACEjH,EAAAL,MAAIqD,GAAA,KAAU9C,KAAdP;;;;SAOR,YAAMuH;IACJlH,EAAAL,MAAIqD,GAAA,KAAU9C,KAAdP;;EAoTF,MAAAwH;IACE,MAAMC,IAAkBzH,KAAKc,aAAad,KAAK+E;IAC/C,MAAMpG,IACJqB,KAAKtD,0BAA0B/E,WAAW,KAC1CqI,KAAKrD,0BAA0BhF,WAAW;IAE5C,MAAM+P,IAAa1H,KAAK8C,+BACpB3I,EAAMQ,uBACNR,EAAMO;IAEV,MAAMiN,IACJ3H,KAAK2F,6BAA6B3F,KAAKY,cAAcjJ,SAAS;IAEhE,OACEa,EAACoP,GAAI;MAACnP,OAAM;OACVD,EAAA;MAAUqP,OAAOjI;QACjBpH,EAAA;MAASC,OAAM;OACbD,EAAA;MAAQC,OAAO;QAAE,CAACuF,EAAQlE,SAAS;;OACjCtB,EAAA;;MAEEC,OAAO;QAAE,CAACuF,EAAQjE,iBAAiB;;OAElCpB,YAAY0H,EAAAL,MAAIF,GAAA,KAAkBgI,aAAaC;;IAI9C7P,aACE,QACAmI,EAAAL,MAAIF,GAAA,KAAkBgI,aAAaE,eACnChI,KAAKiI,gBAAgBjI,KAAKiI,cAAcC,YAAY,IACpDlI,KAAKmI,oBACL;;IAMFjQ,aACE,QACAmI,EAAAL,MAAIF,GAAA,KAAkBgI,aAAaM,eACnCpI,KAAKiI,gBAAgBjI,KAAKiI,cAAcI,SAAS,IACjD7D,WACA;;IAMFtM,aACE,QACAmI,EAAAL,MAAIF,GAAA,KAAkBgI,aAAaQ,SACnCtI,KAAKiI,gBAAgBjI,KAAKiI,cAAcM,cAAc,IACtD/D,WACA,sBAMRhM,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAO;QAAE,CAACuF,EAAQhE,SAAS;QAAM,kBAAkB;;OACtDxB,EAAA;;MAEEC,OAAM;MACN+P,UAAUf;MACV/N,aAAaS,EAAMW;MACnB2N,gBACEpI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOgO;MAE/BC,aAAatI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOkO;MAC1CzQ,MAAK;MACL0Q,SAASxI,EAAAL,MAAIiD,GAAA;QAGfzK,EAAA;;MAEEC,OAAM;MACN+P,UAAUf;MACVI,OAAO7H,KAAKyG;MACZzN,OAAOgH,KAAKoD;MACZqF,gBAAgBpI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOoO;MAC7CH,aAAatI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOqO;MAC1CF,SAASxI,EAAAL,MAAImD,GAAA;QAGf3K,EAAA;;MAEEC,OAAM;MACN+P,UAAUf;MACVI,OAAOxH,EAAAL,MAAIC,GAAA;MACXjH,OAAOgH,KAAK2C;MACZkG,SAASxI,EAAAL,MAAIsD,GAAA;MACbmF,gBACEpI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOsO;MAE/BL,aAAatI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOuO;SAI9CzQ,EAAA;;MAEES,IAAI0G;MACJlH,OAAM;MACN+P,UAAUf;MAAe,cACbpH,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOwO;MAAwB,iBAClDlJ,KAAKgD,0BAA0B,UAAU;MAAM,iBAC/CtD;MACfhH,SAAS2H,EAAAL,MAAI+C,GAAA;MACbgF,OAAO1H,EAAAL,MAAIF,GAAA,KAAkBpF,OAAOwO;OAEpC1Q,EAAA;MAAUC,OAAM;MAAUmD,KAAK8L;SAGjClP,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACN+P,UAAUf;MACV/O,SAAS2H,EAAAL,MAAIqD,GAAA;OAEb7K,EAAA;MAAUC,OAAM;MAAUmD,KAAKzB,EAAMU;QACpCwF,EAAAL,MAAIF,GAAA,KAAkBpF,OAAO6M,SAGhC/O,EAAA;;MAEEC,OAAM;MACN+P,WAAWb,KAAuBF;MAClC/O,SAAS2H,EAAAL,MAAII,GAAA;OAEZC,EAAAL,MAAIF,GAAA,KAAkBpF,OAAO4B,UAIlC9D,EAAA;;MAEES,IAAIyG;MAA6B,mBAChBC;MACjBlH,OAAO;QACL,CAACuF,EAAQhE,SAAS;QAClB,oBAAoB;QACpB,8BAA8BgG,KAAKgD;;MAErCmG,OAAOnJ,KAAKgD;MACZoG,QAAQpJ,KAAKgD;OAEbxK,EAAA,aAkBEA,EAAA;;MAEEC,OAAM;MACN+P,UAAUf;MACVI,OAAO7H,KAAK+G;MACZ/N,OAAOgH,KAAK6C;MACZgG,SAASxI,EAAAL,MAAIuD,GAAA;MACbkF,gBACEpI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAO2O;MAE/BV,aAAatI,EAAAL,MAAIF,GAAA,KAAkBpF,OAAO4O;UAkBhD9Q,EAAA;;MAEEC,OAAM;MACN8Q,WAAW;MACXC,UAAU;MACVb,aAAatI,EAAAL,MAAIF,GAAA,KAAkB2J;MACnCZ,SAASxI,EAAAL,MAAIkC,GAAA;SAIjB1J,EAAA;MAAKC,OAAOuF,EAAQ/D;QAChB+F,KAAK+E,UACLvM,EAAA;MACEC,OAAO;QACL,gBAAgB;QAChB,wBAAwB;QACxB,4BAA4BuH,KAAKc;QACjC,gBAAgBnC;;MAElB+K,wBAAuB;MACvBC,kBAAiB;MACjBC,oBAAoBvJ,EAAAL,MAAI+B,GAAA;MACxB8H,qBAAqBxJ,EAAAL,MAAIuB,GAAA;MACzBuI,kBAAkBzJ,EAAAL,MAAIwD,GAAA,KAAyBjD,KAA7BP;MAClBtC,KAAMC,KACHqG,EAAAhE,MAAIG,GAA6BxC,GAAE;OAGrCc,yBACC,EAAC,YACDE,GACA0B,EAAAL,MAAIF,GAAA,QAGJnB,IACE,EACEnG,EAAA;MAAwBC,OAAM;OAC5BD,EAAA;MAA+BC,OAAM;OAClC4H,EAAAL,MAAIF,GAAA,KAAkB9C,QAAQ+M,iBAEhCtN,sBACC,WACAuD,KAAKtD,2BACLsD,KAAKrD,2BACLqD,KAAKqB,8BACLrB,KAAKnD,kBACLmD,KAAKlD,wBACLkD,KAAK9D,oBACLmE,EAAAL,MAAIQ,GAAA,MACJR,KAAK/D,kBACL+D,KAAKjD,aACLsD,EAAAL,MAAIF,GAAA,QAIRtH,EAAA;MAAwBC,OAAM;OAC5BD,EAAA;MAA+BC,OAAM;OAClC4H,EAAAL,MAAIF,GAAA,KAAkB9C,QAAQuF,iBAEhC9F,sBACC,WACAuD,KAAKtD,2BACLsD,KAAKrD,2BACLqD,KAAKqB,8BACLrB,KAAKnD,kBACLmD,KAAKlD,wBACLkD,KAAK9D,oBACLmE,EAAAL,MAAIQ,GAAA,MACJR,KAAK/D,kBACL+D,KAAKjD,aACLsD,EAAAL,MAAIF,GAAA,WAIV,MAEJtH,EAAA;MAAwBC,OAAM;OAC3BkG,KACCnG,EAAA,sCACEA,EAAA;MACEC,OAAM;MACNuR,YAAU;MACVC,cAAc9P,EAAMO;MACpBwP,YAAW;YAOrB1R,EAAA;MACE2R,aAAa9J,EAAAL,MAAIF,GAAA,KAAkBsK,OAAOD;MAC1CE,aAAahK,EAAAL,MAAIF,GAAA,KAAkBsK,OAAOrC;MAC1C1P,aAAagI,EAAAL,MAAIF,GAAA,KAAkBsK,OAAO/R;MAC1CiS,MAAI;MACJ7R,OAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["serverSelectorCss","CSS_BUNDLES","INFO_ICON","getIconPath","category","name","colorType","LOCK_ICON","LANGUAGE_ICON","GxIdeServerSelector","_GxIdeServerSelector_chSearchIcon","set","this","_GxIdeServerSelector_versionsSelect","value","caption","_GxIdeServerSelector__componentLocale","_GxIdeServerSelector_chGridRecentlyUsedServersEl","_GxIdeServerSelector_chGridConnectedServersEl","_GxIdeServerSelector_previousSelectedRowId","_GxIdeServerSelector_selectedRowId","_GxIdeServerSelector_serverUrlEL","_GxIdeServerSelector_cancelHandler","cancelCallback","_GxIdeServerSelector_confirmHandler","async","selectedConnectionType","selectServerCallback","uri","selectedServerUri","selectedServerName","isValidUrl","__classPrivateFieldGet","_GxIdeServerSelector_validateUrl","call","serverUrlInputValue","serverNameInputValue","_GxIdeServerSelector_filterValueChangedHandler","event","filterValue","detail","toLowerCase","filteredConnectedServersData","connectedServersData","filter","item","serverName","includes","_GxIdeServerSelector_inputHandler","field","enableConfirmButton","_GxIdeServerSelector_enableConfirmButton","url","serverUrl","URL","protocolValid","protocol","startsWith","ex","length","_GxIdeServerSelector_onConnectedServersRowDoubleClickHandler","_GxIdeServerSelector_selectConnectedServersHandler","_GxIdeServerSelector_onRecentlyUsedRowDoubleClickHandler","_GxIdeServerSelector_selectRecentlyUsedServersHandler","_GxIdeServerSelector_handleServerSelection","recentlyUsedServersData","serversData","otherGridEl","isFirstSelection","__classPrivateFieldSet","rowId","undefined","selectedServer","find","server","id","userName","gxServerUsername","selectRow","_GxIdeServerSelector_connectionTypeChangedHandler","_GxIdeServerSelector_renderTabularGridColumnSet","hideColumnName","h","class","columnId","columnName","settingable","columnNameHidden","size","config","tabularGrid","colSize","maxContent","resizable","sortable","onColumnSortChanged","_GxIdeServerSelector_handleColumnSortChanged","auto","_GxIdeServerSelector_renderTooltip","text","actionElement","blockAlign","inlineAlign","tooltipSettings","delay","_GxIdeServerSelector_renderTabularGridCommonCells","_GxIdeServerSelector_renderIcon","accessLevel","isConnected","_GxIdeServerSelector_renderRecentlyUsedServersGrid","rowSelectionMode","ref","el","allowColumnReorder","onRowClicked","onRowDoubleClicked","map","rowid","stateIconSrc","stateTitle","emptyConnectedServers","isAnimated","_GxIdeServerSelector_renderConnectedServersGrid","e","sortDirection","aux","sort","a","b","icon","src","_GxIdeServerSelector_renderFooter","isSelectionMode","onClick","footer","cancel","disabled","confirm","Map","componentWillLoad","Locale","getComponentStrings","_a","_b","render","connectionTypeClass","recentlyUsedEmptyClass","Host","model","header","title","onChange","startImgSrc","onInput","placeholder","placeholders","searchServers","accessibleName","type","htmlFor","recentlyUsed","allServers","labels","input","maxLength","errors","serverUrlInvalid"],"sources":["src/components/team-dev/server-selector/server-selector.scss?tag=gx-ide-server-selector&encapsulation=shadow","src/components/team-dev/server-selector/server-selector.tsx"],"sourcesContent":["@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content max-content 1fr max-content;\n row-gap: var(--mer-spacing--md);\n overflow: auto;\n}\n\n:host(.new-connection) {\n grid-template-rows: max-content 1fr;\n}\n\n:host(.recently-used-empty) {\n grid-template-rows: max-content 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// General\n\n.tabular-grid {\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n border-inline: 1px solid var(--grid-cell__border-color);\n --grid-cell__box-shadow-inline-block:\n inset 0 0px var(--grid-cell__border-color),\n inset 0 -1px var(--grid-cell__border-color);\n overflow: auto;\n}\n\n.tabular-grid-rowset-empty {\n border-block-end: 1px solid var(--grid-cell__border-color);\n overflow: hidden;\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\n.text-neutral-gray-400,\n.tabular-grid-cell.text-neutral-gray-400 {\n // WA: colors for text should be defined in Mercury\n color: var(--mer-color__neutral-gray--400);\n}\n// Header\n\n.search-server {\n inline-size: 50%;\n}\n\n// Recently Used\n\n.tabular-grid-recently-used .tabular-grid-column::part(bar) {\n --grid-cell__padding-block: 0;\n --grid-cell__padding-inline: 0;\n}\n\n.tabular-grid.tabular-grid-recently-used {\n border-block-end: 1px solid var(--grid-cell__border-color);\n max-block-size: 100px;\n}\n\n// All Servers\n\n.tabular-grid-all-servers {\n overflow: auto;\n}\n\n.field-block-all-servers {\n overflow: auto;\n}\n\n.tabular-grid-all-servers {\n border-block: 1px solid var(--grid-cell__border-color);\n\n .tabular-grid-column:first-child::part(bar-name-icon) {\n background-image: var(\n --icon__system_order-alphabetically_on-elevation--enabled\n );\n block-size: var(--mer-icon__box--md);\n inline-size: var(--mer-icon__box--md);\n background-size: var(--mer-icon__size--md);\n }\n .tabular-grid-rowset-empty {\n border-block-end: none;\n overflow: hidden;\n }\n}\n\n.tabular-grid-all-servers .tabular-grid-column:first-child::part(bar) {\n --grid-common__gap: 0;\n}\n","// Stencil\nimport { Component, Element, h, Host, Prop, State } from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport {\n ChEditCustomEvent,\n TabularGridRowClickedEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { JSX } from \"@stencil/core/internal\";\nimport { config } from \"../../../common/config\";\nimport {\n ControlValidation\n // validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { FormSubmitResult } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/tooltip\",\n \"chameleon/scrollbar\",\n \"components/tabular-grid\"\n];\n\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-surface\"\n});\n\nconst LOCK_ICON = getIconPath({\n category: \"system\",\n name: \"lock\",\n colorType: \"on-surface\"\n});\n\nconst LANGUAGE_ICON = getIconPath({\n category: \"system\",\n name: \"language\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-server-selector\",\n styleUrl: \"server-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/server-selector\"]\n})\nexport class GxIdeServerSelector {\n #chSearchIcon = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"select\", caption: \"Select a server from the list below\" },\n { value: \"new\", caption: \"Enter a server URL manually\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n\n #chGridRecentlyUsedServersEl: HTMLChTabularGridElement;\n #chGridConnectedServersEl: HTMLChTabularGridElement;\n #previousSelectedRowId: string | undefined;\n #selectedRowId: string | undefined;\n #serverUrlEL: HTMLChEditElement;\n\n @Element() el: HTMLGxIdeServerSelectorElement;\n\n /**\n * State to enable/disable confirm button.\n */\n @State() enableConfirmButton: boolean = false;\n\n /**\n * State to track if this is the first selection made by the user.\n */\n @State() isFirstSelection: boolean = true;\n\n /**\n * State to track if the server URL is valid.\n */\n @State() isValidUrl: boolean = true;\n\n /**\n * The current server URL input value.\n */\n @State() serverUrlInputValue: string = \"\";\n\n /**\n * The current server URL input value.\n */\n @State() serverNameInputValue: string = \"\";\n\n /**\n * The selected server URI.\n */\n @State() selectedServerUri: string | undefined;\n\n /**\n * The selected server name.\n */\n @State() selectedServerName: string | undefined = \"None\";\n\n /**\n * The user name of the selected server.\n */\n @State() userName: string;\n\n /**\n * State to store the filter input value to filter the list-box\n */\n @State() filterValue: string = \"\";\n\n /**\n * Servers filtered\n */\n @State() filteredConnectedServersData: ConnectedGXServerData[] = [];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The selected connection type\n */\n @State() selectedConnectionType: ConnectionOption = \"select\";\n\n /**\n * The list of connected GX servers.\n */\n @Prop({ mutable: true }) connectedServersData: ConnectedGXServerData[] = [];\n\n /**\n * The list of recently used servers.\n */\n @Prop() readonly recentlyUsedServersData: ConnectedGXServerData[] = [];\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * Callback that must be invoked when the 'Confirm' button is pressed and the Select Server option is checked.\n */\n @Prop() readonly selectServerCallback!: (\n authenticationSessionOrigin: AuthenticationSessionOrigin\n ) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.selectedServerUri = this.connectedServersData[0]?.serverUrl;\n this.userName = this.connectedServersData[0]?.gxServerUsername;\n\n this.filteredConnectedServersData = this.connectedServersData;\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #confirmHandler = async (): Promise<void | ServerType> => {\n if (this.selectedConnectionType === \"select\") {\n await this.selectServerCallback({\n uri: this.selectedServerUri,\n name: this.selectedServerName\n });\n } else if (this.selectedConnectionType === \"new\") {\n this.isValidUrl = this.#validateUrl(this.serverUrlInputValue);\n if (this.isValidUrl) {\n await this.selectServerCallback({\n uri: this.serverUrlInputValue,\n name: this.serverNameInputValue\n });\n }\n }\n };\n\n #filterValueChangedHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.filterValue = (event.detail as string).toLowerCase();\n this.filteredConnectedServersData = this.connectedServersData.filter(item =>\n item.serverName.toLowerCase().includes(this.filterValue)\n );\n };\n\n #inputHandler = (\n event: ChEditCustomEvent<string> | InputEvent,\n field: \"serverUrlInputValue\" | \"serverNameInputValue\"\n ) => {\n this.enableConfirmButton = false;\n this[field] = event.detail as string;\n this.#enableConfirmButton();\n };\n\n #validateUrl = (url: string): boolean => {\n try {\n const serverUrl = new URL(url);\n const protocolValid =\n (serverUrl.protocol === \"http:\" || serverUrl.protocol === \"https:\") &&\n url.startsWith(`${serverUrl.protocol}//`);\n return protocolValid;\n } catch (ex) {\n return false;\n }\n };\n\n #enableConfirmButton = () => {\n if (\n this.serverUrlInputValue &&\n this.serverUrlInputValue.length > 0 &&\n this.serverNameInputValue &&\n this.serverNameInputValue.length > 0\n ) {\n this.enableConfirmButton = true;\n } else {\n this.enableConfirmButton = false;\n }\n };\n\n #onConnectedServersRowDoubleClickHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) => {\n this.#selectConnectedServersHandler(event);\n this.#confirmHandler();\n };\n\n #onRecentlyUsedRowDoubleClickHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) => {\n this.#selectRecentlyUsedServersHandler(event);\n this.#confirmHandler();\n };\n\n #selectConnectedServersHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) =>\n this.#handleServerSelection(\n event,\n this.connectedServersData,\n this.#chGridRecentlyUsedServersEl\n );\n\n #selectRecentlyUsedServersHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) =>\n this.#handleServerSelection(\n event,\n this.recentlyUsedServersData,\n this.#chGridConnectedServersEl\n );\n\n #handleServerSelection = async (\n event: CustomEvent<TabularGridRowClickedEvent>,\n serversData: ConnectedGXServerData[],\n otherGridEl: HTMLChTabularGridElement\n ): Promise<void> => {\n if (!this.isFirstSelection) {\n this.#previousSelectedRowId = this.#selectedRowId;\n }\n this.#selectedRowId = event.detail.rowId;\n if (this.#selectedRowId === undefined) {\n this.enableConfirmButton = false;\n this.selectedServerUri = undefined;\n this.selectedServerName = undefined;\n return;\n } else {\n const selectedServer = serversData.find(\n server => server.id === this.#selectedRowId\n );\n this.enableConfirmButton = true;\n this.selectedServerName = selectedServer?.serverName;\n this.selectedServerUri = selectedServer?.serverUrl;\n this.userName = selectedServer?.gxServerUsername || \"\";\n this.isFirstSelection = false;\n await otherGridEl?.selectRow(this.#previousSelectedRowId, false);\n }\n };\n\n #connectionTypeChangedHandler = (event: CustomEvent<string>) => {\n this.selectedConnectionType = event.detail as ConnectionOption;\n if (this.selectedConnectionType === \"new\") {\n this.enableConfirmButton = false;\n this.serverUrlInputValue = \"\";\n }\n this.selectedServerName = \"None\";\n };\n\n #renderTabularGridColumnSet = (\n hideColumnName: boolean = false\n ): HTMLChTabularGridColumnsetElement => {\n return (\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnId=\"icon\"\n class=\"tabular-grid-column\"\n columnName=\"Icon\"\n settingable={false}\n columnNameHidden={true}\n size={config.tabularGrid.colSize.maxContent}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"serverName\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Server Name\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.serverName}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"serverUrl\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Server Url\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.auto}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"userName\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Username\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.userName}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"status\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Status\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.maxContent}\n resizable={false}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n );\n };\n\n #renderTooltip = (text: string): JSX.Element | null => {\n return text !== \"\" ? (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={null}\n blockAlign=\"outside-end\"\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {text}\n </ch-tooltip>\n ) : null;\n };\n\n #renderTabularGridCommonCells = (server: ConnectedGXServerData) => {\n return [\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderIcon(server.accessLevel)}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-server-name\">\n {server.serverName}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-server-url\">\n {server.serverUrl}\n {this.#renderTooltip(server.serverUrl)}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {server.gxServerUsername}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell text-neutral-gray-400 body-italic-s\">\n {server.isConnected && \"Connected\"}\n </ch-tabular-grid-cell>\n ];\n };\n\n #renderRecentlyUsedServersGrid = (hideColumnName: boolean): Element => {\n return (\n <ch-tabular-grid\n class={\"tabular-grid-recently-used tabular-grid\"}\n rowSelectionMode=\"single\"\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridRecentlyUsedServersEl = el)\n }\n allowColumnReorder={false}\n onRowClicked={this.#selectRecentlyUsedServersHandler}\n onRowDoubleClicked={this.#onRecentlyUsedRowDoubleClickHandler}\n id=\"recently-used-servers\"\n >\n {this.#renderTabularGridColumnSet(hideColumnName)}\n {this.recentlyUsedServersData.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.recentlyUsedServersData.map(\n (server: ConnectedGXServerData) => (\n <ch-tabular-grid-row rowid={server.id} class=\"tabular-grid-row\">\n {this.#renderTabularGridCommonCells(server)}\n </ch-tabular-grid-row>\n )\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={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyConnectedServers}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #renderConnectedServersGrid = (): Element => {\n return (\n <ch-tabular-grid\n class={\"tabular-grid tabular-grid-all-servers\"}\n rowSelectionMode=\"single\"\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridConnectedServersEl = el)\n }\n allowColumnReorder={false}\n onRowClicked={this.#selectConnectedServersHandler}\n onRowDoubleClicked={this.#onConnectedServersRowDoubleClickHandler}\n id=\"all-servers\"\n >\n {this.#renderTabularGridColumnSet()}\n {this.filteredConnectedServersData.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.filteredConnectedServersData.map(\n (server: ConnectedGXServerData) => (\n <ch-tabular-grid-row rowid={server.id} class=\"tabular-grid-row\">\n {this.#renderTabularGridCommonCells(server)}\n </ch-tabular-grid-row>\n )\n )}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty class=\"tabular-grid-rowset-empty\">\n <gx-ide-empty-state\n stateIconSrc={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyConnectedServers}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #handleColumnSortChanged = (e: CustomEvent) => {\n const { columnId, sortDirection } = e.detail;\n\n const aux = this.connectedServersData;\n aux.sort((a: any, b: any) => {\n if (a[columnId] < b[columnId]) {\n return sortDirection === \"asc\" ? -1 : 1;\n }\n if (a[columnId] > b[columnId]) {\n return sortDirection === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n\n this.connectedServersData = [...aux];\n };\n\n #renderIcon = (accessLevel: string): JSX.Element => {\n const icon = accessLevel === \"private\" ? LOCK_ICON : LANGUAGE_ICON;\n return <ch-image class=\"icon-md\" src={icon}></ch-image>;\n };\n\n #renderFooter = () => {\n const isSelectionMode = this.selectedConnectionType === \"select\";\n return (\n <footer\n class={{\n \"control-footer-with-border\": true,\n \"control-footer-space-between\":\n this.selectedConnectionType === \"select\",\n \"space-between\": isSelectionMode,\n \"spacing-body-inline\": true,\n \"spacing-body-block\": true\n }}\n >\n {isSelectionMode && (\n <p class=\"body-italic-m\">Selected: {this.selectedServerName}</p>\n )}\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // confirm button\n class=\"button-primary\"\n onClick={this.enableConfirmButton && this.#confirmHandler}\n disabled={!this.enableConfirmButton}\n >\n {this.#_componentLocale.footer.confirm}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n const connectionTypeClass =\n this.selectedConnectionType === \"new\" && \"new-connection\";\n const recentlyUsedEmptyClass =\n this.recentlyUsedServersData.length === 0 && \"recently-used-empty\";\n return (\n <Host\n class={`widget elevation-1 ${connectionTypeClass} ${recentlyUsedEmptyClass}`}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <main class=\"section\">\n <header class=\"header spacing-body-block-start spacing-body-inline\">\n <div class=\"field-group\">\n <label class=\"body-regular-m text-neutral-gray-400\">\n {this.#_componentLocale.header.title}\n </label>\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#connectionTypeChangedHandler}\n value={this.#versionsSelect[0].value}\n ></ch-radio-group-render>\n\n {this.selectedConnectionType === \"select\" && (\n <ch-edit\n class=\"input search-server\"\n id=\"server-name-search\"\n startImgSrc={this.#chSearchIcon}\n onInput={this.#filterValueChangedHandler}\n placeholder={\n this.#_componentLocale.placeholders.searchServers\n }\n accessibleName=\"search server\"\n type=\"search\"\n ></ch-edit>\n )}\n </div>\n </header>\n {this.selectedConnectionType === \"select\" && [\n this.recentlyUsedServersData.length > 0 && (\n <div class=\"field field-block spacing-body-inline\">\n <label class=\"label\" htmlFor=\"recently-used-servers\">\n {this.#_componentLocale.recentlyUsed.title}\n </label>\n {this.#renderRecentlyUsedServersGrid(true)}\n </div>\n ),\n <div class=\"field field-block field-block-all-servers spacing-body-inline\">\n <label class=\"label\" htmlFor=\"all-servers\">\n {this.#_componentLocale.allServers.title}\n </label>\n {this.#renderConnectedServersGrid()}\n </div>\n ]}\n\n {this.selectedConnectionType === \"new\" && (\n <section class=\"spacing-body-inline\">\n <div class=\"layout layout--cols-2\">\n <div class=\"field field-block layout__panel\">\n <label class=\"label\" htmlFor=\"server-url\">\n {this.#_componentLocale.labels.serverUrl}\n </label>\n <ch-edit\n // server url\n class={{ \"input\": true, \"input-error\": !this.isValidUrl }}\n id=\"server-url\"\n value={this.serverUrlInputValue}\n onInput={event =>\n this.#inputHandler(event, \"serverUrlInputValue\")\n }\n placeholder={this.#_componentLocale.placeholders.serverUrl}\n ref={el => (this.#serverUrlEL = el as HTMLChEditElement)}\n ></ch-edit>\n </div>\n <div class=\"field field-block layout__panel\">\n <label class=\"label\" htmlFor=\"server-name\">\n {this.#_componentLocale.labels.serverName}\n </label>\n <ch-edit\n // server friendly name\n class=\"input\"\n id=\"server-name\"\n value={this.serverNameInputValue}\n onInput={event =>\n this.#inputHandler(event, \"serverNameInputValue\")\n }\n placeholder={this.#_componentLocale.placeholders.serverName}\n maxLength={18}\n ></ch-edit>\n </div>\n {!this.isValidUrl && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={\n this.#serverUrlEL as unknown as HTMLButtonElement\n }\n blockAlign=\"outside-end\"\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.#_componentLocale.errors.serverUrlInvalid}\n </ch-tooltip>\n )}\n </div>\n </section>\n )}\n\n {this.#renderFooter()}\n </main>\n </Host>\n );\n }\n}\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n};\n\nexport type ConnectionOption = \"select\" | \"new\";\n\nexport type ServerType = \"legacy\" | \"next\";\n\nexport type ServerAccessLevel = \"public\" | \"private\";\n\nexport type AuthenticationSessionOrigin = {\n uri: string;\n name: string;\n};\n\nexport type ConnectedGXServerData = {\n id: string;\n serverUrl: string;\n accessLevel: ServerAccessLevel;\n masterSessionUsername: string;\n serverName?: string;\n gxServerUsername: string;\n isConnected: boolean;\n};\n\nexport type NewServerConnectionData = {\n serverUrl: string;\n serverName: string;\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["wwFilesCss","CSS_BUNDLES","CLEAR_ICON","getIconPath","category","name","colorType","FILTER_ICON","INFO_ICON","ACCORDION_FILTER_ID","FILTER_AFTER_DATE_TIME","FILTER_AFTER_LAST_BUILD","FILTER_AFTER_IMPORT","CHECKBOX_CHECKED_VALUE","CHECKBOX_UNCHECKED_VALUE","GxIdeWWFiles","_GxIdeWWFiles_componentLocale","set","this","_GxIdeWWFiles_ACCORDION_MODEL","_GxIdeWWFiles_nameValue","_GxIdeWWFiles_moduleValue","_GxIdeWWFiles_searchContentsValue","_GxIdeWWFiles_categoryValue","_GxIdeWWFiles_allDescendants","_GxIdeWWFiles_userValue","_GxIdeWWFiles_selectedObjectsIds","_GxIdeWWFiles_chGridEl","_GxIdeWWFiles_filterModuleEl","_GxIdeWWFiles_setFilterDefaultValues","__classPrivateFieldSet","Object","assign","defaultModule","defaultCategory","categoriesComboBoxModel","length","value","afterValue","filterAfterComboBoxModel","dateTimeValue","undefined","_GxIdeWWFiles_allDescendantsCheckboxHandler","event","detail","__classPrivateFieldGet","_GxIdeWWFiles_getObjects","call","_GxIdeWWFiles_handleSelectionChanged","ev","rowsId","selectionChangeCallback","_GxIdeWWFiles_handleRowDoubleClicked","_GxIdeWWFiles_openSelectionCallbackHandler","_GxIdeWWFiles_handleRowContextMenu","preventDefault","stopPropagation","contextMenuCallback","selection","selectedRowsId","clientX","clientY","_GxIdeWWFiles_attachGridListeners","addEventListener","_GxIdeWWFiles_categoryInputHandler","async","_GxIdeWWFiles_clearDateTimeValue","_GxIdeWWFiles_dateTimeInputHandler","_GxIdeWWFiles_deleteSelectionCallbackHandler","deleteSelectionCallback","_GxIdeWWFiles_deselectAll","selectAllRows","_GxIdeWWFiles_evaluateModifiedDates","objectModifiedDate","filterSelectedModifiedDate","filterSelectedModifiedDateAsDate","Date","h","class","_GxIdeWWFiles_formatDate","_GxIdeWWFiles_filterAfterTypeCallbackHandler","date","formatDate","_GxIdeWWFiles_setLoadingState","parentId","id","filtersValues","searchContents","parent","allDescendants","modifiedAfter","showModified","modifiedBy","modifiedDate","loadCallback","then","items","objects","isLoading","_GxIdeWWFiles_renderHeader","htmlFor","filter","onInput","_GxIdeWWFiles_nameInputHandler","part","debounce","config","inputDebounce","disabled","moduleFolder","labelPosition","defaultValue","selectEntityCallback","selectModuleCallback","ref","el","onValueChanged","_GxIdeWWFiles_moduleValueChangedHandler","model","slot","showSearchContents","content","_GxIdeWWFiles_searchContentsInputHandler","categories","caption","checkedValue","unCheckedValue","modified","_GxIdeWWFiles_showModifiedCheckboxHandler","after","user","_GxIdeWWFiles_userInputHandler","hide","dateTime","src","actionElement","blockAlign","inlineAlign","delay","tooltipSettings","dateTimeTooltip","type","onClick","_GxIdeWWFiles_renderObjects","gridIsEmpty","loading","empty","rowSelectionMode","columnName","columnNameHidden","settingable","size","tabularGrid","colSize","maxContent","tableHead","module","gridColumnsVisibility","description","auto","lastUser","importDate","lastBuildDate","_a","map","object","rowid","icon","hiChar","toLowerCase","loaderTitle","loader","title","show","isAnimated","stateIconSrc","stateTitle","emptyState","_GxIdeWWFiles_newFileCallbackHandler","newFileCallback","openSelectionCallback","_GxIdeWWFiles_selectAll","dateTimeValueChanged","categoriesChanged","newCategories","mapOptionsToComboBoxItemModel","componentWillLoad","Locale","getComponentStrings","accordionCaption","expanded","componentDidLoad","disconnectedCallback","removeEventListener","keyDownHandler","eventInfo","document","activeElement","key","reload","error","console","fallbackError","render","Host","objCount","matching","footer","btnSelectAll","btnNew"],"sources":["src/components/ww-files/ww-files.scss?tag=gx-ide-ww-files&encapsulation=shadow","src/components/ww-files/ww-files.tsx"],"sourcesContent":["@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n container-type: inline-size;\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - - -\n// Header\n// - - - - - - - - - - - -\n\n.header {\n grid-template-areas:\n \"name module-folder\"\n \"advanced-filter advanced-filter\";\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: max-content max-content;\n}\n.name {\n grid-area: name;\n}\n.module-folder {\n grid-area: module-folder;\n}\n.advanced-filter {\n grid-area: advanced-filter;\n}\n\n// Advanced Filter\n.advanced-filter {\n &__container {\n display: grid;\n grid-auto-rows: max-content;\n }\n &__first-row {\n grid-template-columns: 1fr 1fr;\n }\n &__second-row {\n grid-template-columns: 1fr 1fr 1fr;\n }\n .all-descendants__modified {\n display: flex;\n flex-direction: row;\n align-items: center;\n block-size: 32px;\n gap: 16px;\n align-self: self-end;\n }\n}\n// date/time\n.field-date {\n grid-template-areas:\n \"label-date-time label-date-time\"\n \"input-date-time icon-clear-date-time\";\n grid-template-columns: 1fr max-content;\n column-gap: var(--mer-spacing--2xs);\n}\n.label-date-time {\n // WA: There is no official way to use an icon (ch-image) within a label\n display: flex;\n align-items: center;\n gap: 6px;\n .icon-md {\n // WA: Icon looks so small that it is not recognizable\n --mer-icon__box--md: 16.8px;\n }\n grid-area: label-date-time;\n}\n.input-date-time {\n block-size: 31.98px; // WA: ch-edit of type \"date\" block-size is a little bit larger than regular ch-edit block-size. It should compute to 31.98px at the time of writting.\n grid-area: input-date-time;\n}\n.icon-clear-date-time {\n grid-area: icon-clear-date-time;\n}\n\n// - - - - - - - - - - - -\n// Grid\n// - - - - - - - - - - - -\n\n.tabular-grid {\n overflow: auto;\n inline-size: 100%;\n border-inline-end: var(--section-common-border);\n}\n.tabular-grid.empty::part(main),\n.tabular-grid.loading::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n position: relative;\n}\n.main__files-container {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: var(--mer-spacing--xs);\n position: relative;\n z-index: 1;\n}\n\n@include hiChar;\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 4\n )\n);\n.tabular-grid-cell-description {\n min-inline-size: max-content !important; // TODO: See how to remove the !important\n}\n\n@include hiChar();\n\n// - - - - - - - - - - - -\n// Responsive\n// - - - - - - - - - - - -\n\n// @container (max-width: 992px) {\n// .main__files-container {\n// grid-template-columns: repeat(3, 1fr);\n// }\n// }\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n Listen,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TabularGridRowContextMenuEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { GxOption } from \"../../common/types\";\nimport { EntityData, ContextMenuInfo } from \"../../common/types\";\nimport { config } from \"../../common/config\";\nimport { mapOptionsToComboBoxItemModel, hiChar } from \"./helpers\";\nimport {\n AccordionModel,\n ComboBoxModel\n} from \"@genexus/chameleon-controls-library\";\nimport { formatDate } from \"../../common/helpers\";\nimport { GxIdeEntitySelectorCustomEvent } from \"../..\";\n\ninterface TabularGridWithSelection extends HTMLChTabularGridElement {\n selectAllRows: (select?: boolean) => Promise<void>;\n}\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/combo-box\",\n \"components/accordion\",\n \"components/edit\",\n \"components/icon\",\n \"components/tooltip\",\n \"components/tabular-grid\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst CLEAR_ICON = getIconPath({\n category: \"system\",\n name: \"close\",\n colorType: \"neutral\"\n});\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-elevation\"\n});\n\nconst ACCORDION_FILTER_ID = \"advanced-filter\";\nconst FILTER_AFTER_DATE_TIME = \"afterDateTime\";\nconst FILTER_AFTER_LAST_BUILD = \"afterLastBuild\";\nconst FILTER_AFTER_IMPORT = \"afterImport\";\n\nconst CHECKBOX_CHECKED_VALUE = \"checked\";\nconst CHECKBOX_UNCHECKED_VALUE = \"unchecked\";\n\n@Component({\n tag: \"gx-ide-ww-files\",\n styleUrl: \"ww-files.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ww-files\"]\n})\nexport class GxIdeWWFiles {\n #componentLocale: any;\n #ACCORDION_MODEL: AccordionModel = [];\n\n // Filter Values\n #nameValue: string;\n #moduleValue: EntityData;\n // Advanced Filter Values\n #searchContentsValue: string;\n #categoryValue: string;\n #allDescendants: CheckboxState;\n #userValue: string;\n // Other\n #selectedObjectsIds: string[] = [];\n\n @Element() el: HTMLGxIdeWwFilesElement;\n #chGridEl!: HTMLChTabularGridElement;\n #filterModuleEl!: HTMLGxIdeEntitySelectorElement;\n\n /**\n * The \"After\" control value. Controls the visibility of the \"Date/Time\" control.\n */\n @State() afterValue: string;\n\n /**\n * The \"Category\" options as combo box model\n */\n @State() categoriesComboBoxModel: ComboBoxModel = [];\n\n /**\n * Value of the Date/Time control\n */\n @State() dateTimeValue: string;\n @Watch(\"dateTimeValue\")\n dateTimeValueChanged() {\n this.#getObjects();\n }\n\n /**\n * A loader that is shown when the filter changes and the server has to retrieve new data.\n */\n @State() isLoading: boolean = true;\n\n /**\n * The options for the \"After\" combo-box\n */\n @State() filterAfterComboBoxModel: ComboBoxModel;\n\n /**\n * For show or hide the filters relative to modifiers\n */\n @State() showModified: CheckboxState = CHECKBOX_CHECKED_VALUE;\n\n /**\n * The files rendered in the table\n */\n @State() objects: ObjectData[] = [];\n\n /**\n * The categories render in the filter category selector\n */\n @Prop() readonly categories!: GxOption[];\n @Watch(\"categories\")\n categoriesChanged(newCategories: GxOption[]) {\n this.categoriesComboBoxModel = mapOptionsToComboBoxItemModel(newCategories);\n }\n\n /**\n * This is a function provided by the developer for show the context menu of the selected files.\n */\n @Prop() readonly contextMenuCallback!: ContextMenuCallback;\n\n /**\n * The default value for the category filter\n */\n @Prop() readonly defaultCategory: string;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * This is a function provided by the developer for delete the selected files.\n */\n @Prop() readonly deleteSelectionCallback!: DeleteSelectionCallback;\n\n /**\n * Controls the visibility of the tabular grid cell columns, and respective cells.\n */\n @Prop() readonly gridColumnsVisibility: GridColumnsVisibility = {\n description: true,\n importDate: true,\n lastBuildDate: true,\n lastUser: true,\n modifiedDate: true\n };\n\n /**\n * This is a function provided by the developer that return a list of files to populate the table of files.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n *\n */\n @Prop() readonly newFileCallback!: NewFileCallback;\n\n /**\n * This is a function provided by the developer to expand the data of files that is double-clicked or entered.\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Callback invoked when the action is executed on the Module/Folder filter (button '...'). It returns the information of the selected object (id and name) or 'undefined' if it was canceled.\n */\n @Prop() readonly selectModuleCallback!: SelectModuleCallback;\n\n /**\n * This is a function provided by the developer for expanded the data of files that is double-clicked or entered.\n */\n @Prop() readonly selectionChangeCallback!: SelectionChangeCallback;\n\n /**\n * Controls whether to show the Search contents field in the advanced filter section (Not available at the time of writting, since the server is not handling this feature yet.)\n */\n @Prop() readonly showSearchContents = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // initialize combo-box models∂\n this.categoriesChanged(this.categories);\n\n // initialize \"After\" combo-box options\n this.filterAfterComboBoxModel = [\n {\n caption: this.#componentLocale.filter[FILTER_AFTER_DATE_TIME],\n value: FILTER_AFTER_DATE_TIME\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER_LAST_BUILD],\n value: FILTER_AFTER_LAST_BUILD\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER_IMPORT],\n value: FILTER_AFTER_IMPORT\n }\n ];\n\n // initialize accordion model with proper configuration\n this.#ACCORDION_MODEL = [\n {\n id: ACCORDION_FILTER_ID,\n caption: this.#componentLocale.filter.accordionCaption,\n expanded: false\n }\n ];\n\n this.#setFilterDefaultValues();\n }\n #setFilterDefaultValues = () => {\n this.#nameValue = \"\";\n this.#moduleValue = { ...this.defaultModule };\n this.#searchContentsValue = \"\";\n\n this.#categoryValue =\n this.defaultCategory ||\n (this.categoriesComboBoxModel && this.categoriesComboBoxModel.length > 0\n ? this.categoriesComboBoxModel[0].value\n : \"\");\n\n this.#allDescendants = CHECKBOX_UNCHECKED_VALUE;\n\n this.afterValue =\n this.filterAfterComboBoxModel && this.filterAfterComboBoxModel.length > 0\n ? this.filterAfterComboBoxModel[0].value\n : FILTER_AFTER_DATE_TIME;\n\n this.#userValue = \"\";\n this.dateTimeValue = undefined;\n };\n\n componentDidLoad() {\n this.#attachGridListeners();\n this.#getObjects();\n }\n\n disconnectedCallback() {\n // Clean up event listeners to prevent memory leaks\n if (this.#chGridEl) {\n this.#chGridEl.removeEventListener(\"selectionChanged\", this.#handleSelectionChanged);\n this.#chGridEl.removeEventListener(\"rowDoubleClicked\", this.#handleRowDoubleClicked);\n this.#chGridEl.removeEventListener(\"rowContextMenu\", this.#handleRowContextMenu);\n }\n }\n\n @Listen(\"keydown\", { passive: true })\n keyDownHandler(eventInfo: KeyboardEvent) {\n if (document.activeElement === this.el) {\n switch (eventInfo.key) {\n case \"Enter\":\n eventInfo.preventDefault();\n this.#openSelectionCallbackHandler();\n break;\n case \"Delete\":\n eventInfo.preventDefault();\n this.#deleteSelectionCallbackHandler();\n break;\n case \"Escape\":\n eventInfo.preventDefault();\n this.#deselectAll();\n break;\n }\n }\n }\n\n /**\n * Reloads the view, refreshing the filters and the table of files.\n */\n @Method()\n async reload(): Promise<void> {\n try {\n if (this.#componentLocale && this.filterAfterComboBoxModel) {\n this.#setFilterDefaultValues();\n this.#getObjects();\n }\n } catch (error) {\n console.error(\"Error in reload method:\");\n // Fallback: try only getObjects if setFilterDefaultValues fails\n try {\n this.#getObjects();\n } catch (fallbackError) {\n console.error(\"Fallback also failed:\");\n }\n }\n }\n\n #allDescendantsCheckboxHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.#allDescendants =\n event.detail === CHECKBOX_CHECKED_VALUE\n ? CHECKBOX_CHECKED_VALUE\n : CHECKBOX_UNCHECKED_VALUE;\n this.#getObjects();\n };\n\n #handleSelectionChanged = (ev: CustomEvent<{ rowsId: string[] }>): void => {\n this.#selectedObjectsIds = ev.detail.rowsId;\n this.selectionChangeCallback(this.#selectedObjectsIds);\n };\n\n #handleRowDoubleClicked = (): void => {\n this.#openSelectionCallbackHandler();\n };\n\n #handleRowContextMenu = (ev: CustomEvent<TabularGridRowContextMenuEvent>): void => {\n ev.preventDefault();\n ev.stopPropagation();\n this.contextMenuCallback({\n selection: ev.detail.selectedRowsId,\n clientX: ev.detail.clientX,\n clientY: ev.detail.clientY\n });\n };\n\n #attachGridListeners = (): void => {\n this.#chGridEl.addEventListener(\"selectionChanged\", this.#handleSelectionChanged);\n this.#chGridEl.addEventListener(\"rowDoubleClicked\", this.#handleRowDoubleClicked);\n this.#chGridEl.addEventListener(\"rowContextMenu\", this.#handleRowContextMenu);\n };\n\n #categoryInputHandler = async (event: CustomEvent<string> | InputEvent) => {\n this.#categoryValue = event.detail as string;\n this.#getObjects();\n };\n\n #clearDateTimeValue = () => {\n this.dateTimeValue = undefined;\n };\n\n #dateTimeInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.dateTimeValue = event.detail;\n this.#getObjects();\n };\n\n #deleteSelectionCallbackHandler = (): void => {\n this.deleteSelectionCallback(this.#selectedObjectsIds);\n };\n\n #deselectAll = (): void => {\n if (\n this.#chGridEl &&\n typeof (this.#chGridEl as TabularGridWithSelection).selectAllRows === \"function\"\n ) {\n (this.#chGridEl as TabularGridWithSelection).selectAllRows(false);\n }\n };\n\n #evaluateModifiedDates = (\n objectModifiedDate: Date,\n filterSelectedModifiedDate: string\n ) => {\n const filterSelectedModifiedDateAsDate = new Date(\n filterSelectedModifiedDate\n );\n if (filterSelectedModifiedDateAsDate >= objectModifiedDate) {\n // Object modifed date matches with filter date, or was modified after that date.\n // Highlight to show that it matches.\n return <span class=\"hiChar\">{this.#formatDate(objectModifiedDate)}</span>;\n } else {\n return this.#formatDate(objectModifiedDate);\n }\n };\n\n #filterAfterTypeCallbackHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.afterValue = event.detail as string;\n this.#getObjects();\n };\n\n #formatDate = (date: Date): string => {\n return formatDate(date, \"date-time-short\");\n };\n\n #getObjects = () => {\n this.#setLoadingState();\n\n const parentId =\n this.#filterModuleEl && this.#filterModuleEl.value\n ? this.#filterModuleEl.value.id\n : this.defaultModule\n ? this.defaultModule.id\n : \"\";\n\n const filtersValues: ObjectFiltersData = {\n name: this.#nameValue,\n searchContents: this.#searchContentsValue,\n category: this.#categoryValue,\n parent: parentId,\n allDescendants: this.#allDescendants === CHECKBOX_CHECKED_VALUE,\n modifiedAfter: this.showModified ? this.afterValue : undefined,\n modifiedBy: this.showModified ? this.#userValue : undefined,\n modifiedDate: this.showModified ? new Date(this.dateTimeValue) : undefined\n };\n\n this.loadCallback(filtersValues).then((items: ObjectData[]) => {\n this.objects = items;\n this.#selectedObjectsIds = [];\n\n if (this.#chGridEl) {\n this.#deselectAll();\n }\n\n this.isLoading = false;\n });\n };\n\n #renderHeader = (): Element[] => {\n return [\n <div\n // Name\n class=\"field field-block field-name\"\n >\n <label class=\"label\" htmlFor=\"name\">\n {this.#componentLocale.filter.name}\n </label>\n <ch-edit\n id=\"name\"\n class=\"input\"\n value={this.#nameValue}\n onInput={this.#nameInputHandler}\n part=\"filter-files\"\n debounce={config.inputDebounce}\n disabled={this.isLoading}\n ></ch-edit>\n </div>,\n\n <div\n // Module\n class=\"field field-block field-module-folder\"\n >\n <label class=\"label\" htmlFor=\"module-folder\">\n {this.#componentLocale.filter.moduleFolder}\n </label>\n <gx-ide-entity-selector\n part=\"filter-module-folder\"\n id=\"module/folder\"\n labelPosition=\"none\"\n value={this.#moduleValue}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterModuleEl = el as HTMLGxIdeEntitySelectorElement)\n }\n onValueChanged={this.#moduleValueChangedHandler}\n disabled={this.isLoading}\n ></gx-ide-entity-selector>\n </div>,\n\n <ch-accordion-render\n class=\"accordion-outlined advanced-filter\"\n model={this.#ACCORDION_MODEL}\n >\n <div\n slot={ACCORDION_FILTER_ID}\n class=\"spacing-body field-group advanced-filter__container\"\n >\n {this.showSearchContents && (\n <div\n // Search contents\n class=\"field field-block field-search-contents\"\n >\n <label class=\"label\" htmlFor=\"filter-content\">\n {this.#componentLocale.filter.content}\n </label>\n <ch-edit\n id=\"filter-content\"\n class=\"input\"\n onInput={this.#searchContentsInputHandler}\n part=\"filter-content\"\n ></ch-edit>\n </div>\n )}\n\n <div class=\"field-group advanced-filter__first-row\">\n <div\n // Category\n class=\"field field-block field-category\"\n >\n <label class=\"label\" htmlFor=\"filter-category\">\n {this.#componentLocale.filter.category}\n </label>\n <ch-combo-box-render\n id=\"filter-category\"\n class=\"combo-box disabled\"\n value={this.#categoryValue}\n disabled={!this.categories || this.isLoading}\n model={this.categoriesComboBoxModel}\n part=\"filter-category\"\n onInput={this.#categoryInputHandler}\n ></ch-combo-box-render>\n </div>\n\n <div\n // All descendants / Modified\n class=\"all-descendants__modified field field-inline\"\n >\n <ch-checkbox\n // All descendants\n class=\"checkbox\"\n caption={this.#componentLocale.filter.allDescendants}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_UNCHECKED_VALUE}\n value={this.#allDescendants}\n onInput={this.#allDescendantsCheckboxHandler}\n part=\"filter-all-descendants\"\n disabled={this.isLoading}\n ></ch-checkbox>\n\n <ch-checkbox\n // Modified\n class=\"checkbox align-center\"\n caption={this.#componentLocale.filter.modified}\n checkedValue={CHECKBOX_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_UNCHECKED_VALUE}\n value={this.showModified}\n onInput={this.#showModifiedCheckboxHandler}\n part=\"filter-modified\"\n ></ch-checkbox>\n </div>\n </div>\n\n {this.showModified === CHECKBOX_CHECKED_VALUE && (\n <div class=\"field-group advanced-filter__second-row\">\n <div\n // After\n class=\"field field-block field-after\"\n >\n <label class=\"label\" htmlFor=\"filter-after-type\">\n {this.#componentLocale.filter.after}\n </label>\n <ch-combo-box-render\n id=\"filter-after-type\"\n class=\"combo-box\"\n value={this.afterValue}\n model={this.filterAfterComboBoxModel}\n onInput={this.#filterAfterTypeCallbackHandler}\n part=\"filter-after-type\"\n disabled={this.isLoading}\n ></ch-combo-box-render>\n </div>\n\n <div\n // User\n class=\"field field-block field-user\"\n >\n <label class=\"label\" htmlFor=\"filter-user\">\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n id=\"filter-user\"\n class=\"input\"\n value={this.#userValue}\n onInput={this.#userInputHandler}\n part=\"filter-user\"\n debounce={config.inputDebounce}\n disabled={this.isLoading}\n ></ch-edit>\n </div>\n\n {this.afterValue === FILTER_AFTER_DATE_TIME && (\n <div\n // Date/Time\n class={{\n \"field field-block field-date\": true,\n \"hide\": this.afterValue !== FILTER_AFTER_DATE_TIME\n }}\n >\n <label\n class=\"label label-date-time\"\n htmlFor=\"filter-date-time\"\n >\n {this.#componentLocale.filter.dateTime}\n <ch-image\n class=\"icon-md icon-clear-date-time\"\n src={INFO_ICON}\n ></ch-image>\n <ch-tooltip\n class=\"tooltip\"\n actionElement={null}\n blockAlign=\"outside-start\"\n inlineAlign=\"inside-start\"\n delay={config.tooltipSettings.delay}\n >\n {this.#componentLocale.filter.dateTimeTooltip}\n </ch-tooltip>\n </label>\n\n <ch-edit\n id=\"filter-date-time\"\n type=\"datetime-local\"\n class=\"input input-date-time\"\n value={this.dateTimeValue}\n onInput={this.#dateTimeInputHandler}\n part=\"filter-date-time\"\n disabled={this.isLoading}\n ></ch-edit>\n\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#clearDateTimeValue}\n disabled={this.isLoading}\n >\n <ch-image class=\"icon-md\" src={CLEAR_ICON} type=\"mask\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </ch-accordion-render>\n ];\n };\n\n #renderObjects = (): Element => {\n const gridIsEmpty = !this.objects.length;\n\n return (\n <ch-tabular-grid\n ref={(el: HTMLChTabularGridElement) => (this.#chGridEl = el)}\n class={{\n \"tabular-grid\": true,\n \"loading\": this.isLoading,\n \"empty\": this.objects.length === 0\n }}\n rowSelectionMode=\"multiple\"\n part=\"ch-grid-files\"\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnName=\"\"\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.name}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.module}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n\n {this.gridColumnsVisibility.description && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.description}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.auto}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.modifiedDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.modifiedDate}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.lastUser && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.lastUser}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.importDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.importDate}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n\n {this.gridColumnsVisibility.lastBuildDate && (\n <ch-tabular-grid-column\n columnName={this.#componentLocale.tableHead.lastBuildDate}\n columnNameHidden={false}\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n )}\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects?.map((object: ObjectData) => (\n <ch-tabular-grid-row rowid={object.id} class=\"tabular-grid-row\">\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image src={object.icon}></ch-image>\n </ch-tabular-grid-cell>\n\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(\n object.name.toLowerCase(),\n this.#nameValue.toLowerCase()\n )}\n </ch-tabular-grid-cell>\n\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(object.parent, this.#moduleValue.name)}\n </ch-tabular-grid-cell>\n\n {this.gridColumnsVisibility.description && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-description\">\n {object.description}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.modifiedDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#evaluateModifiedDates(\n object.modifiedDate,\n this.dateTimeValue\n )}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.lastUser && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(object.lastUser?.toLowerCase(), this.#userValue)}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.importDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(\n object.importDate\n ? this.#formatDate(object.importDate)\n : \"\",\n this.#nameValue\n )}\n </ch-tabular-grid-cell>\n )}\n\n {this.gridColumnsVisibility.lastBuildDate && (\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {hiChar(\n object.lastBuildDate\n ? this.#formatDate(object.lastBuildDate)\n : \"\",\n this.#nameValue\n )}\n </ch-tabular-grid-cell>\n )}\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 {this.isLoading ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n description={this.#componentLocale.loader.description}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n isAnimated={true}\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #moduleValueChangedHandler = (\n event: GxIdeEntitySelectorCustomEvent<EntityData>\n ) => {\n this.#moduleValue = event.detail;\n this.#getObjects();\n };\n\n #nameInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.#nameValue = event.detail;\n this.#getObjects();\n };\n\n #newFileCallbackHandler = (): void => {\n this.newFileCallback();\n };\n\n #openSelectionCallbackHandler = (): void => {\n this.openSelectionCallback(this.#selectedObjectsIds);\n };\n\n #searchContentsInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.#searchContentsValue = event.detail;\n this.#getObjects();\n };\n\n #setLoadingState = () => {\n // Only clear if no objects or first load\n if (!this.objects || this.objects.length === 0) {\n this.objects = [];\n }\n this.isLoading = true;\n };\n\n #userInputHandler = (event: CustomEvent<any> | InputEvent) => {\n this.#userValue = event.detail;\n this.#getObjects();\n };\n\n #showModifiedCheckboxHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n this.showModified = event.detail;\n };\n\n #selectAll = (): void => {\n if (\n this.#chGridEl &&\n typeof (this.#chGridEl as TabularGridWithSelection).selectAllRows === \"function\"\n ) {\n (this.#chGridEl as TabularGridWithSelection).selectAllRows();\n }\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border spacing-body-inline spacing-body-block-start field-group\">\n {this.#renderHeader()}\n </header>\n\n {this.#renderObjects()}\n\n <footer class=\"control-footer-with-border control-footer-space-between spacing-body\">\n <p\n // matching objects\n class=\"text-body\"\n part=\"objects-matching\"\n >\n {`${this.objects?.length} ${\n this.#componentLocale.objCount.matching\n }`}\n </p>\n\n <div class=\"buttons-spacer\">\n <button\n // select all button\n id=\"button-select-all\"\n class=\"button-secondary\"\n onClick={this.#selectAll}\n part=\"button button--select-all\"\n disabled={this.isLoading}\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n\n <button\n // new file button\n id=\"button-new-file\"\n class=\"button-primary button-icon-and-text\"\n onClick={this.#newFileCallbackHandler}\n part=\"button button--new-file\"\n disabled={this.isLoading}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type SelectionChangeCallback = (ids: string[]) => Promise<void>;\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\nexport type DeleteSelectionCallback = (ids: string[]) => Promise<void>;\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n// export type ContextMenuCallback = (ids: string[]) => Promise<void>;\nexport type ContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\nexport type NewFileCallback = () => Promise<void>;\nexport type LoadCallback = (\n filters: ObjectFiltersData\n) => Promise<ObjectData[]>;\n\nexport interface ObjectFiltersData {\n name?: string;\n searchContents?: string;\n category?: string;\n parent?: string;\n allDescendants?: boolean;\n modifiedAfter?: string;\n modifiedBy?: string;\n modifiedDate?: Date;\n}\nexport interface ObjectData {\n id: string;\n icon: string;\n name: string;\n description: string;\n parent: string;\n modifiedDate?: Date;\n lastUser?: string;\n importDate?: Date;\n lastBuildDate: Date;\n}\n\nexport type GridColumnsVisibility = {\n description: boolean;\n importDate: boolean;\n lastBuildDate: boolean;\n lastUser: boolean;\n modifiedDate: boolean;\n};\n\ntype CheckboxState =\n | typeof CHECKBOX_CHECKED_VALUE\n | typeof CHECKBOX_UNCHECKED_VALUE;\n"],"mappings":"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"}